我找到了如何使用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(¤cyModel);
ui->tableView_currencies->setAlternatingRowColors(true);
ui->tableView_currencies->setWindowTitle(QObject::tr("Currencies"));
ui->tableView_currencies->show();
}
QTableView
在主窗体上显示为空,只有列和行标题可见。并且没有显示数据。
是否有人知道某个网站上有一些示例,其中QTableView
,QListView
等组件已添加到设计器中?在trolltech(nokia)教程中,所有组件都是动态创建的。
答案 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;