如何在QTabWidget标头中设置QWidget?

时间:2017-07-11 18:54:56

标签: c++ qt qt5 qt4.8 qtabwidget

我想在QTabWidget的标题中插入QLabel和QLineEdit。我已经阅读了Qt的文档,但是找不到任何可以在QTabWidget的Header中设置任何Qwidget的函数。

我该怎么做?或者我是否必须覆盖QTabWidget Painter函数?

任何建议?

1 个答案:

答案 0 :(得分:2)

您必须使用setTabButton功能:

  

void QTabBar :: setTabButton(int index,ButtonPosition position,QWidget   *小部件)

     

在选项卡索引上设置小部件。小部件位于左侧或   右手边取决于位置。

     

隐藏任何先前设置的小部件。

     

标签栏将取得窗口小部件的所有权,因此设置了所有窗口小部件   除非您将其删除,否则它将被标签栏删除   在设置其他小部件(或0)之后单独重新创建小部件。

     

此功能在Qt 4.5中引入。

这与QTabWidget无关,而与QTabBar无关。

要获取QtabBar,您必须使用以下功能:

  

QTabBar * QTabWidget :: tabBar()const

     

返回当前的QTabBar。

示例:

#include <QApplication>

#include <QLabel>
#include <QTabBar>
#include <QTabWidget>
#include <QLineEdit>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTabWidget w;
    w.addTab(new QLabel("widget 1"), "1");
    w.addTab(new QLabel("widget 2"), "2");

    QTabBar *tabBar = w.tabBar();

    tabBar->setTabButton(0, QTabBar::LeftSide, new QLineEdit("LineEdit0"));
    tabBar->setTabButton(0, QTabBar::RightSide, new QLabel("label0"));

    tabBar->setTabButton(1, QTabBar::LeftSide, new QLineEdit("LineEdit1"));
    tabBar->setTabButton(1, QTabBar::RightSide, new QLabel("label1"));
    w.show();

    return a.exec();
}

输出:

enter image description here