我有这个应用程序,用户可以在 QGraphicsView 中绘制一些自定义 QGraphicsItems,我希望关于这些项目的一些数据也显示在 QTableWidget 中。
自定义 QGraphicsItem: 头文件的代码:
类 Clothoid:公共 QGraphicsItem
{
上市:
Clothoid(QPoint startPoint, QPoint endPoint);
虚拟〜Clothoid();
QPoint 点;
QPoint ePoint;
CFloat startCurvature;
CFloat endCurvature;
CFloat 回旋线长度;
CFloat tangentAngle;
...
}
cpp文件:
Clothoid::Clothoid(QPoint startPoint, QPoint endPoint)
{
sPoint = 起点;
ePoint = 端点;
起始曲率 = 0.0;
结束曲率 = 0.0;
ClooidLength = sqrt(pow(endPoint.x() - startPoint.x(),2) +
pow(endPoint.y() - startPoint.y(),2));
}
图形视图的代码:
renderArea::renderArea(QWidget *parent):
QGraphicsView(父)
{
场景 = 新 QGraphicsScene(this);
场景->setItemIndexMethod(QGraphicsScene::NoIndex);
场景->setSceneRect(0, 0, 850, 480);
设置场景(场景);
setCacheMode(CacheBackground);
setViewportUpdateMode(BoundingRectViewportUpdate);
setRenderHint(QPainter::抗锯齿);
setTransformationAnchor(AnchorUnderMouse);
规模(qreal(1.0),qreal(1.0));
setMinimumSize(400, 400);
}
无效渲染区域::mousePressEvent(QMouseEvent *事件)
{
QPoint p = event->pos();
更新列表(p);
}
void renderArea::updateList(const QPoint &p)
{
点点;
点.点 = p;
点.isSelected = false;
list.append(point);
如果 (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);
场景->添加项目(临时);
发出clothoidAdded(&clothoids);
}
其中回旋曲线定义为:
QList 回旋曲线;
我将信号与表格小部件专用的另一个类中的插槽连接起来:
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() + ", " +
回旋曲线->at(i)->sPoint.y()));
setItem(i+1, 4, new QTableWidgetItem(clothoids->at(i)->ePoint.x() + ", " +
回旋曲线->at(i)->ePoint.y()));
}
}
问题是数据没有插入表中。我通过调试进行了检查,发现该数组包含所需的数据。我怎样才能正确访问它?有任何想法吗?
在尝试使用 QTableView 和 QStandardItemModel 时,我遇到了这个问题:模型中的数据没有插入到表中:
renderingWidget::renderingWidget(QWidget *parent) :
QWidget(父),
ui(新的 Ui::renderingWidget)
{
ui->setupUi(这个);
model.setColumnCount(3);
ui->clothoidTable->setModel(&model);
SpinBoxDelegate 委托;
ui->clothoidTable->setItemDelegate(&delegate);
connect (ui->saveButton, SIGNAL(clicked()), this, SLOT(createClothoid()));
}
无效的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);
}
我希望能够在某些文本框/旋转框中插入数据,然后单击按钮,数据应添加到表中。但仅更新行数,而不更新其中的数据。在为模型设置数据时我做错了什么吗?