2009-01-19 6 views
11

Ich verwende eine QTabWidget, um mehrere Dokumente in einem Fenster zu rendern, und ich möchte eine Schließen-Schaltfläche auf jeder Registerkarte zeichnen. Ich verwende Vista und Qt4, so dass das Registerkartenwidget ein natives Windows-Steuerelement ist; Dies kann die Machbarkeit beeinträchtigen.Schließen einer Schaltfläche auf QTabWidget

Weiß jemand, ob es möglich ist, dies mit dem Steuerelement QTabWidget zu tun, oder muss ich ein benutzerdefiniertes Widget erstellen? Wenn das Erstellen eines neuen Widgets die einzige Option ist, würden alle Zeiger sehr geschätzt; Ich bin relativ neu in Qt.

Antwort

6

Momentan gibt es keine Möglichkeit, dies mit dem Lager QTabWidget zu tun, aber die kommende Qt 4.5 (geplant im März 2009 veröffentlicht) wird die ability to add close buttons Registerkarte entweder manuell oder durch Festlegen einer QTabBar.TabsClosable Eigenschaft haben.

Bis dahin ist die einzige Möglichkeit zum Schließen von Schaltflächen die Unterklasse QTabWidget oder QTabBar und fügen Sie sie manuell hinzu (möglich, aber nicht trivial).

10

In 4.5 gibt es Funktion

void setTabsClosable (bool closeable) 
11

Da Qt 4.5. Wenn Sie einfach setTabsClosable(true) auf QTabWidget aufrufen, haben Sie die Schließen-Schaltflächen, aber sie sind nicht an eine Aktion gebunden.
Sie müssen das tabCloseRequested (int) -Signal mit einem Ihrer eigenen Steckplätze verbinden, wenn Sie möchten, dass die Schaltflächen etwas tun.

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; 
} 
Verwandte Themen