找回密码
 立即注册
收起左侧

QT 使用QTabWidget 如何让图片铺满tabbar

1
回复
11116
查看
[复制链接]
累计签到:10 天
连续签到:1 天
来源: 2014-2-21 09:29:44 显示全部楼层 |阅读模式
1Qter豆
QT 使用QTabWidget 如何让图片铺满tabbar

最佳答案

查看完整内容

我就用CSS来处理过,我当时的想法就是拦截QTabWidget的eventFilter,在它的大小变化时重新设置一下css样式来控制. 我专门用一个类来处理QTabWidget的eventFilter事件,就不用重写QTabWidget了,个人挺喜欢用eventFilter的,太方便了. 代码如下: bool CTabWidgetFilter::eventFilter(QObject *object, QEvent *event){ Q_UNUSED(object) if (event->type() == QEvent::Resize){ expandingTabsStyleSheet(m_pTarget); ...
回复

使用道具 举报

累计签到:157 天
连续签到:1 天
2014-2-21 09:29:45 显示全部楼层
本帖最后由 修罗 于 2014-2-21 15:26 编辑

我就用CSS来处理过,我当时的想法就是拦截QTabWidget的eventFilter,在它的大小变化时重新设置一下css样式来控制.
我专门用一个类来处理QTabWidget的eventFilter事件,就不用重写QTabWidget了,个人挺喜欢用eventFilter的,太方便了.
代码如下:
bool CTabWidgetFilter::eventFilter(QObject *object, QEvent *event){
    Q_UNUSED(object)
    if (event->type() == QEvent::Resize){
        expandingTabsStyleSheet(m_pTarget);
    }
    return false;
}

void CTabWidgetFilter::expandingTabsStyleSheet(QTabWidget *tw){
    if(tw->count() < 1) return;
    int nPerWidth = (tw->size().width() / tw->count());
    const int nBorderWidth = 4;
    tw->setStyleSheet(QString("QTabBar::tab{width: %1px;color:#ffffff;border-width: 2px;border-image: url(:/css/tab_center.png) 2 2 2 2 stretch stretch;}"
                              "QTabBar::tab:last{width: %2px;border-width: 2px;border-image: url(:/css/tab_right.png) 2 2 2 2 stretch stretch;}"
                              "QTabBar::tab:selected{border-width: 2px;border-image: url(:/css/tab_left.png) 2 2 2 2 stretch stretch;}"
                              "QTabWidget::pane{border:none;}").arg(nPerWidth - nBorderWidth).arg(nPerWidth + (tw->size().width() % tw->count()) - nBorderWidth));
}
里面使用的那些图片资源是我本地的图片,这两个方法你可以直接使用了的。同理,如果你想设置它们鼠标悬浮的效果,直接使用css来写一下就可以的。你试试吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了