如何访问 QTabWidget 不同选项卡中的小部件?

Posted

技术标签:

【中文标题】如何访问 QTabWidget 不同选项卡中的小部件?【英文标题】:How to access widgets in different tabs of QTabWidget? 【发布时间】:2014-05-27 06:10:34 【问题描述】:

我知道如何创建一个新标签并将新小部件添加到 QTabWidget 的新标签中。

我的代码:

QPlainTextEdit *plainTextEdit = new QPlainTextEdit;
ui->tabWidget->addTab(plainTextEdit , "New");

当我单击按钮时,将创建新选项卡及其自己的 QPlainTextEdit 小部件。

但我不知道如何将属性设置为不同的 QPlainTextEdit 或保存它们的内容。

例如,我想在 tab4 中设置 QPlainTextEdit 的字体大小,并在 tab5 中保存 QPlainTextEdit 的内容。

如何实现这些功能?

【问题讨论】:

【参考方案1】:

要在标签索引处获取小部件,您可以使用 QTabWidgetwidget 函数。

在您的情况下,QPlainTextEdit 是每个标签页的唯一小部件:

QPlainTextEdit* plainTextEdit = (QPlainTextEdit*) ui->tabWidget->widget(0); // for the first tab

plainTextEdit->setPlainText("Hello!");

如果QPlainTextEdit不是唯一的widget,则需要获取widget的children并在其中找到QPlainTextEdit

QList<QPlainTextEdit *> allTextEdits = ui->tabWidget->widget(0)->findChildren<QPlainTextEdit *>();
if (allTextEdits.count() >0) 
    allTextEdits[0]->setPlainText("Hello!");;

【讨论】:

【参考方案2】:

您应该有指向您的QPlainTextEdits 的指针作为主小部件类的成员:

class Widget : public QWidget

    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    void someFunction();
private:
    QPlainTextEdit *plainTextEdit;


Widget::Widget(QWidget *parent)
    : QWidget(parent)

   ...
   plainTextEdit = new QPlainTextEdit;
   ui->tabWidget->addTab(plainTextEdit , "New");


void Widget::someFunction()

   plainTextEdit->setPlainText("Hello!");

【讨论】:

以上是关于如何访问 QTabWidget 不同选项卡中的小部件?的主要内容,如果未能解决你的问题,请参考以下文章

QTabWidget 或 QTabBar 使用 C++ 在不同选项卡中显示相同的 QWidget

QTabWidget 选项卡在其中一个选项卡中不显示任何内容

如何在Qt中获取QWidget的QTabWidget标题文本?

PyQt5 组件之QTabWidget

在运行时使用 QTabWidget 将内容加载到选项卡中

使用 Qtabwidget 中的小部件