访问QTabWidget中选项卡的小部件

8

我有一个 QTabWidget,每个选项卡都有一个 QPlainTextEdit 作为其部件。那么,如何访问每个选项卡小部件?如何编辑该小部件?

1个回答

13

您可以使用QTabWidgetwidget函数来获取指定标签页上的小部件。

如果每个选项卡页面上只有一个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);

4
建议避免使用 QWidget* pWidget= ui->tabWidget->widget(1); 这种方式,而是使用 QWidget* pWidget= ui->tabWidget->findChild<QWidget *>("your_tab_object_name");。这样可以确保即使可移动,您的代码也能按预期工作。当您重新排列标签页(通过代码或使它们可移动)时,第一段代码将无法返回您实际想要的选项卡。 - rbaleksandar
此外,您应该使用qobject_cast<QPlainTextEdit*>,然后检查结果是否为nullptr,而不是检查元对象的类名。 - Folling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接