Domanda

Sto usando un QTabWidget per eseguire il rendering di più documenti in una finestra e desidero disegnare un pulsante di chiusura su ciascuna scheda. Sto usando Vista e Qt4 , quindi il widget tab è un controllo nativo di Windows; ciò può influire sulla fattibilità.

Qualcuno sa se è possibile farlo utilizzando il controllo QTabWidget o devo creare un widget personalizzato? Se la creazione di un nuovo widget è l'unica opzione, qualsiasi puntatore sarebbe molto apprezzato; Sono relativamente nuovo a Qt.

È stato utile?

Soluzione

Attualmente non c'è modo di farlo con lo stock QTabWidget, tuttavia il prossimo Qt 4.5 (previsto per il rilascio a marzo 2009) avrà possibilità di aggiungere pulsanti di chiusura alle schede manualmente o impostando una proprietà QTabBar.TabsClosable .

Fino ad allora, l'unico modo per ottenere i pulsanti di chiusura è sottoclassare QTabWidget o QTabBar e aggiungerlo manualmente (possibile, ma non banale).

Altri suggerimenti

Da Qt 4.5 . Se chiami setTabsClosable (true) su QTabWidget , avrai i pulsanti di chiusura ma non saranno associati a un'azione.
Devi connettere il segnale tabCloseRequested (int) a uno dei tuoi slot se vuoi che i pulsanti facciano qualcosa.

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 c'è la funzione

void setTabsClosable ( bool closeable )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top