QTabWidget奇怪的行为

时间:2018-11-30 00:20:02

标签: c++ qt qt5 qpushbutton qtabwidget

我有两个选项卡,其中将QTableWidget与单元小部件放置在一起。查看图片。

Problem

QTabWidget *tab = new QTabWidget(this);
for (int i = 0; i < 2; ++i) {
    QTableWidget *t = new QTableWidget(1, 1);

    QPushButton *btn = new QPushButton("Click on me!");

    t->setCellWidget(0, 0, btn);
    connect(btn, &QPushButton::clicked, [=]() {
        btn->hide();
    });
    tab->addTab(t, QString::number(i + 1));
}
setCentralWidget(tab);

1 个答案:

答案 0 :(得分:1)

您指示的行为是可预见的,您必须首先知道,如果小部件变得可见,您的孩子也将可见。

让我们分析一下QTabWidget的情况,这个小部件本质上是QTabBar + QStackedWidget,QStackedWidget管理小部件的可见性,后者内部具有QStackedLayout,当它确定要显示某个小部件时将其隐藏当前小部件,并显示新的一个当前小部件。因此,每次选择标签栏时,显示的窗口小部件都会调用该窗口小部件的show方法(在您的情况下为QTableWidget),即使子项被隐藏,它也将使它们可见。

因此,如果您希望在需要的时候可以工作,那么可以在属性中保存可见性的状态,并在showEvent方法中保存可视性的状态,以在必要时应用更改。