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

发布于 2024-11-09 22:12:28 字数 1204 浏览 0 评论 0原文

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

有人知道有一个网站有在设计器中添加 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

彻夜缠绵 2024-11-16 22:12:28

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

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

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

CurrencyModel *currencyModel = new CurrencyModel(ui->tableView_currencies);

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:

The view does not take ownership of the model unless it is the model's parent object because the view may be shared between many different views.
(QTableView doc)

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:

CurrencyModel *currencyModel = new CurrencyModel(ui->tableView_currencies);
夢归不見 2024-11-16 22:12:28

我在设计器中使用 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.

情绪操控生活 2024-11-16 22:12:28

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

QxCurrencyModel* currencyModel = new QxCurrencyModel;

I met and you the same question king_nak is right your currencyModel is Temporary variables;

QxCurrencyModel* currencyModel = new QxCurrencyModel;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文