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(¤cyModel);
ui->tableView_currencies->setAlternatingRowColors(true);
ui->tableView_currencies->setWindowTitle(QObject::tr("Currencies"));
ui->tableView_currencies->show();
}
QTableView
在主窗体上显示为空,只有列和行标题可见。并且没有显示数据。
有人知道有一个网站有在设计器中添加 QTableView、QListView 等组件的示例吗?在 Trolltech(诺基亚)教程中,所有组件都是动态创建的。
I have found example how to use QTableView
:
http://doc.trolltech.com/4.5/sql-querymodel.html
It works fine. Data is shown in QTableView
.
But QTableView
in this example is created dynamically in main.cpp
file.
In my application I have main form and I added QTableView
in designer. I try to populate this QTableView
in constructor but without result:
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
is showing on main form empty, only columns and rows headers are visible. And data is not shown.
Does anybody know of a site with examples where components like QTableView
, QListView
are added in designer? In trolltech (nokia) tutorials all components are created dynamically.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
构造函数执行后模型不再有效!
您创建一个本地对象
currencyModel
,当它超出范围时(在 c'tor 的末尾),该对象将被销毁,但将一个指针传递给它作为表视图的模型!表视图不会深度复制给定的模型,实际上甚至不获取传递的指针的所有权:
您应该简单地分配模型而不是堆(使用
new
) 并将视图设置为其父对象。这样,表视图也会处理它的删除:The model is no longer valid after the constructor is executed!
You create a local object
currencyModel
that will be destroyed when it goes out of scope (at the end of the c'tor), but pass a pointer to it as the model for the table view!The table view doesn't deep-copy the given model, and in fact doesn't even take ownership of the passed pointer:
You should simply allocate the model no the heap (using
new
) and set the view as it's parent object. in that way, the table view will also handle its deletion:我在设计器中使用 QTableWidget 而不是 QTableView 取得了巨大成功。
如果您确实想了解为什么 *View 不起作用而 *Widgets 起作用,您应该使用 Designer/moc 生成代码并将它们相互比较,然后与工作的 *View 示例进行比较。就我个人而言,当 *Widget 类型起作用时我很满意,所以我不再寻找; *Widget继承自*View。
I've used QTableWidget rather than QTableView with great success in designer.
If you really want to understand why the *View's aren't working while *Widgets are, you should use designer/moc to produce the code and compare them to each other, then compare to the working *View examples. Personally, I was satisfied when the *Widget types worked so I stopped looking; *Widget inherits from *View.
我遇到了和你同样的问题 king_nak 是对的你的currencyModel 是临时变量;
I met and you the same question king_nak is right your currencyModel is Temporary variables;