【问题标题】:Access the widget of a tab in a QTabWidget访问 QTabWidget 中选项卡的小部件
【发布时间】:2011-12-30 10:54:25
【问题描述】:

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

【问题讨论】:

    标签: qt qplaintextedit qtabwidget


    【解决方案1】:

    您可以使用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);
    

    【讨论】:

    • 建议:避免使用QWidget* pWidget= ui-&gt;tabWidget-&gt;widget(1);,而使用QWidget* pWidget= ui-&gt;tabWidget-&gt;findChild&lt;QWidget *&gt;("your_tab_object_name");。这将确保即使可移动您的代码也能按预期工作。当您重新排列选项卡(通过代码或使它们可移动)时,第一段代码将无法返回您真正想要的选项卡。
    • 此外,您应该使用qobject_cast&lt;QPlainTextEdit*&gt;,然后测试 nullptr 的结果,而不是检查元对象的类名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多