Frage

Ich bin mit einem QTabWidget auf "mehrere Dokumente in einem Fenster, und ich möchte zu ziehen, die Schaltfläche "schließen" auf jeder Registerkarte.Ich bin mit Vista und Qt4, so dass die tab-widget ist eine native windows-Steuerung;dies kann Auswirkungen auf die Machbarkeit.

Weiß jemand, ob es möglich ist, dies zu tun mit der QTabWidget kontrollieren, oder tun ich haben zu erstellen Sie ein benutzerdefiniertes widget?Wenn die Erstellung eines neuen widgets ist die einzige option, alle Hinweise würden sehr geschätzt;Ich bin relativ neu in Qt.

War es hilfreich?

Lösung

Derzeit gibt es keine Möglichkeit, dies zu tun mit dem Bestand QTabWidget, jedoch die kommende Qt 4.5 (geplant zu sein veröffentlicht im März 2009) haben die - Fähigkeit zu fügen Sie eine Schaltfläche "schließen" tabs entweder manuell oder durch das einstellen eines QTabBar.TabsClosable Eigenschaft.

Bis dann, der einzige Weg, um zu schließen-Schaltflächen ist die Unterklasse QTabWidget oder QTabBar und Sie manuell hinzufügen (möglich, aber nicht trivial).

Andere Tipps

Seit Qt 4.5.Wenn Sie rufen aus setTabsClosable(true) auf QTabWidget, haben Sie die schließen-Schaltflächen, aber Sie werden nicht gebunden zu eine Aktion.
Verbinden Sie das tabCloseRequested(int) signal von Ihrem eigenen slots, wenn Sie möchten, dass die Tasten etwas zu 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;
}

In 4.5 gibt es die Funktion

void setTabsClosable ( bool closeable )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top