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

Rob*_*ert 2 qt qtableview

我已经找到了示例使用方法QTableViewhttp : //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();

}
Run Code Online (Sandbox Code Playgroud)

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

是否与例子,其中分量喜欢的网站的人知道QTableViewQListView在设计中加入?在trolltech(nokia)教程中,所有组件都是动态创建的。

kin*_*nak 5

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

除非视图是模型的父对象,否则视图不会获得模型的所有权,因为该视图可能在许多不同的视图之间共享。(QTableView doc

您应该简单地为模型分配无堆(使用new),并将视图设置为其父对象。这样,表视图还将处理其删除:

CurrencyModel *currencyModel = new CurrencyModel(ui->tableView_currencies);
Run Code Online (Sandbox Code Playgroud)