• 4391阅读
  • 0回复

[提问]C++ Gui Programming with Qt4 第十章的一个例子 [复制链接]

上一主题 下一主题
离线weiweiqiao
 

只看楼主 倒序阅读 楼主  发表于: 2014-06-02
CoordinateSetter是第十章关于QTableWidget和QTableWidgetItem的一个例子,
在此例中作者在每个项中创建QTableWidgetItem实例,并将坐标值写到其中。我想像第四章中SpreadSheet例子那样,通过调用QTableWidget::setItemPrototype(),在需要时由QTableWidget实例自动生成项。但是改写后发现不能自动生成项,麻烦看谁能够给找出问题,谢谢。
文件
  1. #ifndef TESTTABLEWIDGET_H
  2. #define TESTTABLEWIDGET_H
  3. #include <QWidget>
  4. QT_BEGIN_NAMESPACE
  5. class QTableWidget;
  6. QT_END_NAMESPACE
  7. class TestTableWidget : public QWidget
  8. {
  9.     Q_OBJECT
  10. public:
  11.     explicit TestTableWidget(const QList<QPointF>* coord, QWidget *parent = 0);
  12. private:
  13.     void addRow();
  14. private:
  15.     QTableWidget* pTableWidget;
  16.     const QList<QPointF>* pCoordinates;
  17. };
  18. #endif // TESTTABLEWIDGET_H
实现文件
  1. #include "testtablewidget.h"
  2. #include <QTableWidget>
  3. #include <QStringList>
  4. #include <QTableWidgetItem>
  5. #include <QVBoxLayout>
  6. TestTableWidget::TestTableWidget(const QList<QPointF>* coord,
  7.                                  QWidget *parent) :
  8.     QWidget(parent),
  9.     pTableWidget(new QTableWidget(10, 2, this))
  10. {
  11.     pCoordinates = coord;
  12.     QStringList strList;
  13.     strList.append(tr("X"));
  14.     strList.append(tr("Y"));
  15.     pTableWidget->setHorizontalHeaderLabels(strList);
  16.     pTableWidget->setItemPrototype(new QTableWidgetItem());
  17.     //set pTableWidget to be disabled for changing item.
  18.     //pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  19.     for (int row(0); row != pCoordinates->count(); ++row) {
  20.         QPointF point = pCoordinates->at(row);
  21.         addRow();
  22.         pTableWidget->item(row, 0)->setText(QString::number(point.x()));
  23.         pTableWidget->item(row, 1)->setText(QString::number(point.y()));
  24.     }
  25.     QVBoxLayout* vBoxLayout(new QVBoxLayout(this));
  26.     vBoxLayout->addWidget(pTableWidget);
  27.     setLayout(vBoxLayout);
  28. }
  29. void TestTableWidget::addRow()
  30. {
  31.     int row(pTableWidget->rowCount());
  32.     pTableWidget->insertRow(row);
  33. /*
  34.     QTableWidgetItem* item0(new QTableWidgetItem());
  35.     item0->setTextAlignment(Qt::AlignVCenter | Qt::AlignLeft);
  36.     pTableWidget->setItem(row, 0, item0);
  37.     QTableWidgetItem* item1(new QTableWidgetItem());
  38.     item1->setTextAlignment(Qt::AlignBaseline | Qt::AlignRight);
  39.     pTableWidget->setItem(row, 1, item1);
  40.     pTableWidget->setCurrentCell(row, 0);
  41.     */
  42. }
main函数
  1. #include <QtWidgets>
  2. #include "coordinatesetter.h"
  3. #include "testtablewidget.h"
  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication app(argc, argv);
  7.     QList<QPointF> coordinates;
  8.     coordinates << QPointF(0.0, 0.9)
  9.                 << QPointF(0.2, 11.0)
  10.                 << QPointF(0.4, 15.4)
  11.                 << QPointF(0.6, 12.9)
  12.                 << QPointF(0.8, 8.5)
  13.                 << QPointF(1.0, 7.1)
  14.                 << QPointF(1.2, 4.0)
  15.                 << QPointF(1.4, 13.6)
  16.                 << QPointF(1.6, 22.2)
  17.                 << QPointF(1.8, 22.2);
  18.     //CoordinateSetter coordinateSetter(&coordinates);
  19.     //coordinateSetter.show();
  20.     TestTableWidget coordinateSetter(&coordinates);
  21.     coordinateSetter.show();
  22.     return app.exec();
  23. }

在运行到pTableWidget->item(row, 0)->setText(QString::number(point.x()));这里报错。


Jobs Insanely Great.
快速回复
限100 字节
 
上一个 下一个