Установка кнопки закрытия на QTabWidget

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

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

3 ответов


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

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


Начиная С Qt 4.5. Если вы просто позвоните setTabsClosable(true) on 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;
}

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

void setTabsClosable ( bool closeable )