如何在QTabWidget标头中设置QWidget?

问题描述 投票:1回答:1

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

我怎样才能做到这一点?或者我是否必须覆盖QTabWidget Painter功能?

有什么建议?

c++ qt qt5 qt4.8 qtabwidget
1个回答
2
投票

你必须使用setTabButton函数:

void QTabBar :: setTabButton(int index,ButtonPosition position,QWidget * widget)

在选项卡索引上设置小部件。小部件根据位置放置在左侧或右侧。

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

标签栏将取得窗口小部件的所有权,因此在销毁时,标签栏将删除此处设置的所有窗口小部件,除非您在设置其他窗口小部件(或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

© www.soinside.com 2019 - 2024. All rights reserved.