• 33101阅读
  • 11回复

QTabwidget 中QTabbar的风格设置问题 [复制链接]

上一主题 下一主题
离线liuyipower
 
只看楼主 倒序阅读 楼主  发表于: 2008-08-25
— 本帖被 XChinux 执行加亮操作(2008-08-25) —
我做了一个QTabwidget,设置了4个标签,我现在想让每个标签用单独的背景图片来填充
我现在已经做到了让同一个背景图来填充的QTabbar这个类,但是我不知道应该怎么单独给他们设置图片呢?
我把我实现的方法给大家看下,不知道有没有高手能解决我的问题,谢谢

QTabWidget *tabview = new QTabWidget(win);
tabview->setStyleSheet("QTabWidget::pane{border-width:0px;}\
            QTabWidget::tab-bar{border-width:0px;}\
            QTabBar::tab {background-image: url(:/OK/skins/tab button.png);\
            border-bottom-color: #C2C7CB;\
            border-top-left-radius: 0px;\
            border-top-right-radius: 0px;\
            min-width: 140px;min-height: 116px;\
            padding: 0px;\
        }\
        \
        QTabBar::tab:!selected {\
            margin-top: 0px;\
        }\
        QTabBar::tab:selected {\
        background-image: url(:/OK/skins/musicselect.png);\
        }\
        QTabBar::tab:first:selected {\
            margin-left: 0;\
        }\
        QTabBar::tab:last:selected {\
            margin-right: 0;\
        }\
        QTabBar::tab:only-one {\
            margin: 0;\
        }");
离线liuyipower
只看该作者 1楼 发表于: 2008-08-25
哎,论坛无高人?
离线iiiyyyhhhsss

只看该作者 2楼 发表于: 2009-10-23
最近我也想了解这个,单独设置标签风格
离线rqzrqh

只看该作者 3楼 发表于: 2009-10-24
获得单独的指针,一个 一个用stylesheet设置
离线iiiyyyhhhsss

只看该作者 4楼 发表于: 2009-10-24
能否贴段获取指针的代码出来看看呢?我相信这样会帮了很多人

不过有一种情况是,就算获取了指针,那个标签类不是QWidget的子类,

不一定有setStyleSheet()这个成员函数
离线rqzrqh

只看该作者 5楼 发表于: 2009-10-24
肯定是QWidget的类的,不是QWidget的子类是无法显示的。
QTabBar应该是整个栏,而不是一个标签,看了QTabWidget的源码发现实际上它只有一个QTabBar指针。一直以为一个标签就是一个QTabBar,实际上应该是n个标签也是一个QTabBar。QTabBar是QTabWidget中所有标签的组合。
函数QTabBar* QTabWidget::tabBar()可以获得QTabBar的指针,但是这个函数是保护的,所以必须要继承一次QTabWidget才可以获得这个指针。
获得QTabWidget的指针后用at(int index)应该可以获得单个的指针
离线iiiyyyhhhsss

只看该作者 6楼 发表于: 2009-10-24
我试过n种方法了
我想你把“标签”和“标签栏”两个概念弄乱了
我是说单个标签不是QWidget的子类,并不是说QTabBar不是QWidget的子类

其实仔细研究一下QTabBar就会发现很多奇怪的事情,

例如:
创建一个tabBar,然后addTab一次,然后用以下代码
    tabBar->setTabsClosable(true);
    QObject *button=tabBar->children().at(0);
    textEdit->append(button->metaObject()->className());
就会发现每个标签上的关闭按钮是CloseButton类,但是我发现qt里根本没有什么CloseButton类,后来我发现它是自定义的,
继承自QAbstractButton类

例如:
创建一个tabBar,然后addTab一次,然后用以下代码
tabBar->setTabsClosable(true);
textEdit.append(QString::number(tabBar->children().count()));
你就会发现此时,tabBar一共有三个子控件

其中一个是标签上的CloseButton,另外两个是ToolButton,就是使得标签左右移动的那两个按钮

根本没有发现有关单个标签的信息,就更别说获得单个标签的指针了

我现在连单个标签是什么类都不知道,继承自什么类也不知道
离线iiiyyyhhhsss

只看该作者 7楼 发表于: 2009-10-24
再例如:

刚才不是说了每个标签上的关闭按钮是CloseButton吗,

然后我希望用查找每个标签上的CloaeButton按钮的Parent信息来找有关标签的信息

但是却发现CloseButton的parent是QTabBar,而不是单个标签


我原来的构想是:closeButton的parent是标签,标签的parent是标签栏

但偏偏closeButton的parent就是标签栏,中间根本没有什么有关标签的东西
离线iiiyyyhhhsss

只看该作者 8楼 发表于: 2009-10-24
其实要获得QTabWidget里的QTabBar指针,不用继承那么麻烦

只要QTabBar *tabBar=tabWidget->findChildren<QTabBar*>().at(0);

就可以了
离线rqzrqh

只看该作者 9楼 发表于: 2009-10-24
好像是没有这个标签部件,直接在一个区域内画图
实际上的tab也只是QTabBar私有数据中的一个结构体
离线iiiyyyhhhsss

只看该作者 10楼 发表于: 2009-10-24
也就是说基本上是不可能对QTabBar的tab单独设置样式了?
离线tfyt1024

只看该作者 11楼 发表于: 2012-12-19
不知楼主这个问题有没有解决啊,求赐教!!
快速回复
限100 字节
 
上一个 下一个