我有这个应用程序,用户可以在QGraphicsView中绘制一些自定义QGraphicsItems,我希望有关这些项目的一些数据也会显示在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); }
我希望能够在一些文本框/旋转框中插入数据,然后在按钮上单击应该在表格中添加的数据。但只更新行数而不是更新的数据。在为模型设置数据时,我是否做错了什么?
答案 0 :(得分:-1)
这听起来很难听,但我会退出QTableWidget
便利班。
检查this link on Qt Model/View Programming,了解Qt如何处理像你这样的复杂表格。
我对Model / Views的两分钱是这样的:
QTableView
代替QTableWidget
。QAbstractItemModel
并实现data()
(用于阅读)和
文档中您需要的所有其他功能。这是
最棘手的部分,但请参阅上面的链接,了解如何进行演练
这样做。setModel()
QTableView
到你的子模型。如果您有更多问题,我很乐意回答。