首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用新的QWidget替换QWidget

用新的QWidget替换QWidget
EN

Stack Overflow用户
提问于 2013-07-10 06:19:22
回答 5查看 1.6K关注 0票数 0

这个问题对我来说可能是缺乏对C++的理解,因为我为我的问题考虑的可能性似乎都没有意义为什么会发生这种情况。感谢您的反馈。

我正在使用窗体设计器创建一个窗体类,其中包含一个表。我正在尝试用helper类中生成的另一个表替换这个表。我这样做只是为了(希望)保持我设计的漂亮的网格布局,并通过指针操作,得到我想要的替换。下面是表格表单构造函数和相关调用中的一些代码片段:

代码语言:javascript
复制
//tableData is defined in the header file as a QTableWidget*
tableData = this->findChild<QTableWidget *>("tableData");
....
setup();

void setup(){
     tableData = Utilities::createTable(this->file, tableDelim);
     //createTable returns QTableWidget*
     ... other assignments, and label text updates, which seem to all work
}

我的理解是,tableData是一个指针,如果打印出来,将从布局中给出QTableWidget的地址。因此,如果我创建一个QTableWidget*,然后将tableData赋值给它,tableData现在应该指向新的小部件。相反,我只看到一个空白屏幕。

在将tableData指针赋值给新的QTableWidget*之前和之后,我尝试检查它是什么。显示的第二个指针是由createTable()生成的:

代码语言:javascript
复制
QTableWidget(0x101272d40, name = "tableData") QTableWidget(0x10127b3b0, name = "test_sample2.nuc.stats") 
QTableWidget(0x10127b3b0, name = "test_sample2.nuc.stats") QTableWidget(0x10127b3b0, name = "test_sample2.nuc.stats") 

指针似乎正在被重新分配,但绘制的表不是正确的表。

怎么回事?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-10 17:42:03

我的理解是,您希望在designer中设计表布局,但从外部源填充数据。

我建议只使用在setupUi()中创建的QTableWidget,并修改Utilities::createTable(),使其成为Utilities::populateTable(QTableWidget & table, <all the other parameters you need>)。(如果您愿意,也可以使用QTableWidget * -不过,我喜欢将非零断言责任放在调用者身上……)

除此之外,我同意塞巴斯蒂安·兰格的观点。

票数 1
EN

Stack Overflow用户

发布于 2013-07-10 14:03:07

你的假设是对的。将一个变量设置为指向某个对象的指针,然后将该变量设置为指向另一个对象的指针。你从来没有改变过任何对象,只改变了你的变量,它不是用来显示任何东西的。

您需要执行以下操作:

代码语言:javascript
复制
//tableData is defined in the header file as a QTableWidget*
tableData = this->findChild<QTableWidget *>("tableData");

parentLayout = tableData->parent()->layout(); //Get the parent widget to add another table.
parentLayout->removeWidget(tableData);
delete tableData;
parentLayout->addWidget(createTable());
票数 1
EN

Stack Overflow用户

发布于 2013-07-10 06:35:52

您需要使用pTheContainerOfTheOriginalTableWidget->addWidget(tableData);查看此处:http://qt-project.org/forums/viewthread/16547

确保删除了原始的tableWidget,这样就不会有两个(我假设您不想要两个)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17559292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档