在设计器中添加了QTableView:不显示数据

时间:2011-05-27 10:28:23

标签: qt qtableview

我找到了如何使用QTableView的示例: http://doc.trolltech.com/4.5/sql-querymodel.html 它工作正常。数据显示在QTableView

但是此示例中的QTableView是在main.cpp文件中动态创建的。 在我的应用程序中,我有主表单,我在设计器中添加了QTableView。我尝试在构造函数中填充此QTableView但没有结果:

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


    QMap<QString, double> currencyMap;
        currencyMap.insert("AUD", 1.3259);
        currencyMap.insert("CHF", 1.2970);
        currencyMap.insert("CZK", 24.510);


        CurrencyModel currencyModel;
        currencyModel.setCurrencyMap(currencyMap);

      ui->tableView_currencies->setModel(&currencyModel);
      ui->tableView_currencies->setAlternatingRowColors(true);

      ui->tableView_currencies->setWindowTitle(QObject::tr("Currencies"));
      ui->tableView_currencies->show();

}

QTableView在主窗体上显示为空,只有列和行标题可见。并且没有显示数据。

是否有人知道某个网站上有一些示例,其中QTableViewQListView等组件已添加到设计器中?在trolltech(nokia)教程中,所有组件都是动态创建的。

3 个答案:

答案 0 :(得分:4)

执行构造函数后,模型不再有效!
您创建一个本地对象currencyModel,当它超出范围时(在c'tor的末尾)将被销毁,但是将指针传递给它作为表视图的模型!
表视图不会深度复制给定的模型,实际上甚至没有获取传递的指针的所有权:

  

视图不取模型的所有权,除非它是模型的父对象,因为视图可以在许多不同的视图之间共享。   (QTableView doc

您应该简单地分配模型而不是堆(使用new)并将视图设置为它的父对象。以这种方式,表视图也将处理其删除

答案 1 :(得分:0)

我在设计师中使用了QTableWidget而不是QTableView。

如果您真的想了解为什么* View在* Widgets工作时没有工作,您应该使用designer / moc生成代码并将它们相互比较,然后与工作进行比较*查看示例。就个人而言,当* Widget类型工作时我很满意,所以我不再寻找; * Widget继承自* View。

答案 2 :(得分:-1)

我遇到了你,同样的问题,king_nak是对的,你的货币模型是临时变量;

QxCurrencyModel* currencyModel = new QxCurrencyModel;