访问 QTabWidget 中选项卡的小部件
Posted
技术标签:
【中文标题】访问 QTabWidget 中选项卡的小部件【英文标题】:Access the widget of a tab in a QTabWidget 【发布时间】:2011-12-30 10:54:25 【问题描述】:我有一个QTabWidget
,其中每个选项卡都有一个QPlainTextEdit
作为其小部件。那么,如何访问每个选项卡小部件?如何编辑该小部件?
【问题讨论】:
【参考方案1】:您可以使用QTabWidget
的widget
函数来获取指定选项卡索引处的小部件。
如果QPlainTextEdit
是每个标签页的唯一小部件,那么返回的小部件就是那个。否则,您需要获取小部件的children
并在其中找到QPlainTextEdit
。
QPlainTextEdit* pTextEdit = NULL;
QWidget* pWidget= ui->tabWidget->widget(1); // for the second tab
// You can use metaobject to get widget type or qobject_cast
if (pWidget->metaObject()->className() == "QPlainTextEdit")
pTextEdit = (QPlainTextEdit*)pWidget;
else
QList<QPlainTextEdit *> allTextEdits = pWidget->findChildren<QPlainTextEdit *>();
if (allTextEdits.count() != 1)
qError() << "Error";
return;
pTextEdit = allTextEdits[0];
// Do whatever you want with it...
ptextEdit->setPlainText("Updated Plain Text Edit);
【讨论】:
建议:避免使用QWidget* pWidget= ui->tabWidget->widget(1);
,而使用QWidget* pWidget= ui->tabWidget->findChild<QWidget *>("your_tab_object_name");
。这将确保即使可移动您的代码也能按预期工作。当您重新排列选项卡(通过代码或使它们可移动)时,第一段代码将无法返回您真正想要的选项卡。
此外,您应该使用qobject_cast<QPlainTextEdit*>
,然后测试 nullptr 的结果,而不是检查元对象的类名。以上是关于访问 QTabWidget 中选项卡的小部件的主要内容,如果未能解决你的问题,请参考以下文章