【问题标题】:QTabWidget strange behaviorQTabWidget 奇怪的行为
【发布时间】: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);

【问题讨论】:

    标签: c++ qt qt5 qpushbutton qtabwidget


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2015-07-20
      • 2010-10-03
      • 2021-07-12
      • 2013-10-04
      • 2019-01-23
      相关资源
      最近更新 更多