2

我找到了如何使用的示例:http QTableView: //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在主窗体上显示为空,只有列和行标题可见。并且没有显示数据。

有没有人知道一个站点,其中包含在设计器中添加诸如QTableView、之类的组件的示例QListView?在 trolltech (nokia) 教程中,所有组件都是动态创建的。

4

3 回答 3

5

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

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

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

CurrencyModel *currencyModel = new CurrencyModel(ui->tableView_currencies);
于 2011-05-27T10:47:29.800 回答
0

我使用 QTableWidget 而不是 QTableView 在设计师方面取得了巨大成功。

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

于 2011-05-27T10:49:26.817 回答
-1

我遇到了和你一样的问题 king_nak 是对的,你的 currencyModel 是临时变量;

QxCurrencyModel* currencyModel = new QxCurrencyModel;
于 2012-02-24T06:31:35.897 回答