Ввод кнопки закрытия в QTabWidget

Я использую QTabWidget для рендеринга нескольких документов в окне, и я хочу нарисовать кнопку закрытия на каждой вкладке. Я использую Vista и Qt4, поэтому виджет вкладки - это собственный элемент управления Windows; это может повлиять на осуществимость.

Кто-нибудь знает, можно ли это сделать с помощью элемента управления QTabWidget, или мне нужно создать собственный виджет? Если создание нового виджета является единственным вариантом, любые указатели будут высоко оценены; Я относительно новичок в Qt.

Ответ 1

В настоящее время нет никакого способа сделать это с запасом QTabWidget, однако предстоящий Qt 4.5 (планируется выпустить в марте 2009 года) будет иметь способность добавьте закрывающие кнопки в закладки вручную или установив свойство QTabBar.TabsClosable.

До тех пор единственным способом получить близкие кнопки является подкласс QTabWidget или QTabBar и добавить его вручную (возможно, но не тривиально).

Ответ 2

Так как Qt 4.5. Если вы просто вызываете setTabsClosable(true) на QTabWidget, у вас будут кнопки закрытия, но они не будут связаны с действием.
Вы должны подключить сигнал tabCloseRequested (int) к одному из ваших собственных слотов, если вы хотите, чтобы кнопки что-то делали.

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

Ответ 3

В 4.5 существует функция

void setTabsClosable ( bool closeable )