这个问题对我来说可能是缺乏对C++的理解,因为我为我的问题考虑的可能性似乎都没有意义为什么会发生这种情况。感谢您的反馈。
我正在使用窗体设计器创建一个窗体类,其中包含一个表。我正在尝试用helper类中生成的另一个表替换这个表。我这样做只是为了(希望)保持我设计的漂亮的网格布局,并通过指针操作,得到我想要的替换。下面是表格表单构造函数和相关调用中的一些代码片段:
//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()生成的:
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") 指针似乎正在被重新分配,但绘制的表不是正确的表。
怎么回事?
发布于 2013-07-10 17:42:03
我的理解是,您希望在designer中设计表布局,但从外部源填充数据。
我建议只使用在setupUi()中创建的QTableWidget,并修改Utilities::createTable(),使其成为Utilities::populateTable(QTableWidget & table, <all the other parameters you need>)。(如果您愿意,也可以使用QTableWidget * -不过,我喜欢将非零断言责任放在调用者身上……)
除此之外,我同意塞巴斯蒂安·兰格的观点。
发布于 2013-07-10 14:03:07
你的假设是对的。将一个变量设置为指向某个对象的指针,然后将该变量设置为指向另一个对象的指针。你从来没有改变过任何对象,只改变了你的变量,它不是用来显示任何东西的。
您需要执行以下操作:
//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());发布于 2013-07-10 06:35:52
您需要使用pTheContainerOfTheOriginalTableWidget->addWidget(tableData);查看此处:http://qt-project.org/forums/viewthread/16547
确保删除了原始的tableWidget,这样就不会有两个(我假设您不想要两个)。
https://stackoverflow.com/questions/17559292
复制相似问题