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 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.

Était-ce utile?

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 )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top