QTabWidget 奇怪的行为

Posted

技术标签:

【中文标题】QTabWidget 奇怪的行为【英文标题】:QTabWidget strange behavior 【发布时间】:2018-11-30 00:20:02 【问题描述】:

我有两个标签,其中放置了带有单元格小部件的 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);

【问题讨论】:

【参考方案1】:

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

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

因此,如果您需要,如果您需要解决方法,那就是在属性和 showEvent 方法中保存可见性状态,以便在必要时应用更改。

【讨论】:

以上是关于QTabWidget 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

选项卡未添加到 QTabWidget

拦截并忽略 QTabWidget 中的***事件

PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?

错误:'QTabWidget::QTabWidget(const QTabWidget&)' 是私有的

parseInt() 函数的奇怪行为

removeFromParent() 奇怪的行为