Положить кнопку закрытия на QTabWidget - PullRequest
11 голосов
/ 20 января 2009

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

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

Ответы [ 3 ]

12 голосов
/ 10 мая 2013

С 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;
}
11 голосов
/ 27 мая 2009

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

void setTabsClosable ( bool closeable )
7 голосов
/ 20 января 2009

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

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

...