У меня есть это приложение, где пользователь может рисовать некоторые собственные QGraphicsItems в QGraphicsView, и я хотел бы, чтобы некоторые данные об этих элементах также отображались в QTableWidget.
Код для пользовательского заголовочного файла QGraphicsItem::
class Clothoid : public QGraphicsItem
{
public:
Clothoid(QPoint startPoint, QPoint endPoint);
virtual ~Clothoid();
QPoint sPoint;
QPoint ePoint;
CFloat startCurvature;
CFloat endCurvature;
CFloat clothoidLength;
CFloat tangentAngle;
...
}
cpp файл:
Clothoid::Clothoid(QPoint startPoint, QPoint endPoint)
{
sPoint = startPoint;
ePoint = endPoint;
startCurvature = 0.0;
endCurvature = 0.0;
clothoidLength = sqrt(pow(endPoint.x() - startPoint.x(),2) +
pow(endPoint.y() - startPoint.y(),2));
}
Код для графического представления:
renderArea::renderArea(QWidget *parent):
QGraphicsView(parent)
{
scene = new QGraphicsScene(this);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
scene->setSceneRect(0, 0, 850, 480);
setScene(scene);
setCacheMode(CacheBackground);
setViewportUpdateMode(BoundingRectViewportUpdate);
setRenderHint(QPainter::Antialiasing);
setTransformationAnchor(AnchorUnderMouse);
scale(qreal(1.0), qreal(1.0));
setMinimumSize(400, 400);
}
void renderArea::mousePressEvent(QMouseEvent *event)
{
QPoint p = event->pos();
updateList(p);
}
void renderArea::updateList(const QPoint &p)
{
Point point;
point.point = p;
point.isSelected = false;
list.append(point);
if (list.size() > 1)
updateClothoid(list[list.size()-2].point, list[list.size()-1].point);
}
void renderArea::updateClothoid(const QPoint &p1, const QPoint &p2)
{
Clothoid *temp = new Clothoid(p1, p2);
clothoids.append(temp);
scene->addItem(temp);
emit clothoidAdded(&clothoids);
}
, где клотоиды определены как:
QList clothoids;
Я связываю сигнал со слотом в другом классе, специально для виджета таблицы:
void TableViewList::onClothoidAdded(QList *clothoids)
{
setRowCount(clothoids->size());
for (int i = 0; i size(); i++){
setItem(i+1, 0, new QTableWidgetItem(clothoids->at(i)->startCurvature));
setItem(i+1, 1, new QTableWidgetItem(clothoids->at(i)->endCurvature));
setItem(i+1, 2, new QTableWidgetItem(clothoids->at(i)->clothoidLength));
setItem(i+1, 3, new QTableWidgetItem(clothoids->at(i)->sPoint.x() + ", " +
clothoids->at(i)->sPoint.y()));
setItem(i+1, 4, new QTableWidgetItem(clothoids->at(i)->ePoint.x() + ", " +
clothoids->at(i)->ePoint.y()));
}
}
Проблема в том, что данные не вставлены в таблицу.Я проверил отладку и увидел, что массив содержит нужные данные.Как я могу получить к нему доступ правильно?Любые идеи?
При попытке с QTableView и QStandardItemModel я сталкиваюсь с этой проблемой: данные в модели не вставляются в таблицу:
renderingWidget::renderingWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::renderingWidget)
{
ui->setupUi(this);
model.setColumnCount(3);
ui->clothoidTable->setModel(&model);
SpinBoxDelegate delegate;
ui->clothoidTable->setItemDelegate(&delegate);
connect (ui->saveButton, SIGNAL(clicked()), this, SLOT(createClothoid()));
}
void renderingWidget::createClothoid()
{
model.setRowCount(model.rowCount()+1);
QModelIndex index = model.index(model.rowCount(), 1, QModelIndex());
model.setData(index, QVariant(ui->lengthSpinBox->value()));
index = model.index(model.rowCount(), 2, QModelIndex());
model.setData(index, QVariant(ui->sCurvSpinBox->value()));
index = model.index(model.rowCount(), 3, QModelIndex());
model.setData(index, QVariant(ui->eCurvSpinBox->value()));
ui->clothoidTable->setModel(&model);
}
Я хочу иметь возможность вставить данныев некоторых текстовых полях / полях прокрутки и затем при нажатии кнопки данные должны быть добавлены в таблицу.Но обновляется только количество строк, а не данные внутри.Я делаю что-то не так при настройке данных для модели?