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 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章
PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?