Mettre un bouton de fermeture sur QTabWidget
-
19-08-2019 - |
Question
J'utilise un QTabWidget
pour restituer plusieurs documents dans une fenêtre et je souhaite dessiner un bouton de fermeture sur chaque onglet. J'utilise Vista ??em> et Qt4 . Le widget Onglet est donc un contrôle de fenêtre natif. cela peut affecter la faisabilité.
Est-ce que quelqu'un sait s'il est possible de faire cela en utilisant le contrôle QTabWidget
, ou dois-je créer un widget personnalisé? Si la création d'un nouveau widget est la seule option, tous les pointeurs seraient très appréciés. Je suis relativement nouveau sur Qt.
La solution
Il n’existe actuellement aucun moyen de le faire avec le stock QTabWidget. Toutefois, le prochain Qt 4.5 (dont la sortie est prévue pour mars 2009) aura le possibilité d'ajouter des boutons de fermeture aux onglets manuellement ou en définissant une propriété QTabBar.TabsClosable
.
Jusque-là, le seul moyen d'obtenir des boutons rapprochés consiste à sous-classer QTabWidget
ou QTabBar
et à l'ajouter manuellement (possible, mais pas anodin).
Autres conseils
Depuis Qt 4.5 . Si vous appelez simplement setTabsClosable (true)
sur QTabWidget
, vous aurez les boutons de fermeture, mais ils ne seront liés à aucune action.
Vous devez connecter le signal tabCloseRequested (int) à l’un de vos propres emplacements si vous souhaitez que les boutons fassent quelque chose.
MainWindow::MainWindow()
m_tabs = new QTabWidget();
m_tabs->setTabsClosable(true);
connect(m_tabs, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
void MainWindow::closeTab(const int& index)
{
if (index == -1) {
return;
}
QWidget* tabItem = m_tabs->widget(index);
// Removes the tab at position index from this stack of widgets.
// The page widget itself is not deleted.
m_tabs->removeTab(index);
delete(tabItem);
tabItem = nullptr;
}
En 4.5 il y a une fonction
void setTabsClosable ( bool closeable )