QTabWidget奇怪的行为

问题描述 投票:2回答:1

我有两个选项卡,其中放置QTableWidget与单元格小部件。见图。

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);
c++ qt qt5 qpushbutton qtabwidget
1个回答
1
投票

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

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

因此,如果您希望这样做,如果您认为需要解决方法,则可以在属性和showEvent方法中保存可见性的状态,以便在必要时应用更改。

© www.soinside.com 2019 - 2024. All rights reserved.