未调用QTableModel数据

时间:2014-01-25 10:54:22

标签: qt qt5

我有一个扩展QAbstractTableModel的自定义表格模型。我已经实施了data()rowCount()columnCount()

这是我的模特:

point_data_view_model::point_data_view_model(QObject *parent) :
    QAbstractTableModel(parent)
{
}

int point_data_view_model::rowCount(const QModelIndex & /*parent*/) const
{
   return 2;
}

int point_data_view_model::columnCount(const QModelIndex & /*parent*/) const
{
    return 3;
}

QVariant point_data_view_model::data(const QModelIndex &index, int role) const
{
    if (role == Qt::DisplayRole)
    {
       return QString("Row%1, Column%2")
                   .arg(index.row() + 1)
                   .arg(index.column() +1);
    }
    return QVariant();
}

但是当我想在表单中显示表格视图时,不会显示任何内容。

这是表单的构造函数:

SelectWindow::SelectWindow(QWidget *parent) :
    QMainWindow(parent)
    ,ui(new Ui::SelectWindow)
{
     ui->setupUi(this);

    point_data_view_model  myModel;

    ui->tableView->setModel(&myModel);
    myModel.timerHit();
   ui->tableView->show();


}

换句话说,我的模型中的数据函数不会被调用。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

point_data_view_model  myModel;

这是个大问题。 myModel是该构造函数的本地函数,并在函数退出时被销毁。只要您需要使用它,您就需要将该模型存储在某个地方 - SelectWindow的成员变量应该是合适的。

答案 1 :(得分:2)

您正在堆栈上创建myModel。调用ui->tableView->show();后会立即删除它。因此视图丢失了模型,并且没有机会调用data。您应该使用myModel创建new

point_data_view_model* myModel = new point_data_view_model();