2 votes

Comportement étrange de QTabWidget

J'ai deux onglets où j'ai placé QTableWidget avec le widget de cellule. Voir l'image.

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);

1voto

eyllanesc Points 79506

Le comportement que vous indiquez est prévisible, vous devez d'abord savoir que si un widget devient visible, vos enfants le seront aussi.

Analysons le cas de QTabWidget, ce widget est essentiellement une QTabBar + QStackedWidget, le QStackedWidget gère la visibilité des widgets, et ce dernier possède en interne un QStackedLayout qui, lorsqu'il établit qu'un certain widget doit être affiché, cache le widget actuel et affiche le nouveau widget actuel. Ainsi, chaque fois que vous sélectionnez la barre de tabulation, le widget qui est affiché appellera la méthode show de ce widget (dans votre cas, QTableWidget), et il rendra vos enfants visibles même s'ils sont cachés.

Donc si vous voulez que si vous avez le besoin que cela fonctionne comme vous le supposez une solution de contournement devrait se produire il est de sauvegarder le statut de la visibilité dans une propriété et dans la méthode showEvent pour appliquer le changement si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X