首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于QTabBar和QIcon的QT自定义QTabBar

用于QTabBar和QIcon的QT自定义QTabBar
EN

Stack Overflow用户
提问于 2014-09-24 14:40:19
回答 1查看 980关注 0票数 0

我定制了一个Qtabbar的QMdiarea,以获取水平选项卡,而不是垂直选项卡,如下所示:QTabBar

但是我想在我的QTabBar中插入图标。如果我将我的自定义样式应用到我的QTabBar中,我的图标就不会出现。如果我不申请,我的图标就会出现。

在这里,我的定制风格:

代码语言:javascript
复制
class CustomTabStyle : public QPlastiqueStyle
{
   Q_OBJECT
public:
QSize sizeFromContents(ContentsType type, const QStyleOption *option,const QSize &size, const QWidget *widget) const
{
    QSize s = QPlastiqueStyle::sizeFromContents(type, option, size, widget);
    if (type == QStyle::CT_TabBarTab)
        s.transpose();
    return s;
}
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
{
    if (element == CE_TabBarTabLabel)
    {
        if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option))
        {
            QStyleOptionTab opt(*tab);
            opt.shape = QTabBar::RoundedNorth;
            QPlastiqueStyle::drawControl(element, &opt, painter, widget);
            return;
        }
    }
    QPlastiqueStyle::drawControl(element, option, painter, widget);
}

};

我的风格是这样的:

代码语言:javascript
复制
    mMdiAreaDock=aMdiArea;
m_pMdiAreaTabBar = NULL;
QObjectList listChildren = mMdiAreaDock->children();
for (QObjectList::Iterator i = listChildren.begin(); i != listChildren.end(); ++i)
{
    if (QString((*i)->metaObject()->className()) == "QTabBar")
    {
        m_pMdiAreaTabBar = dynamic_cast<QTabBar*>(*i);
        break;
    }
}
m_pMdiAreaTabBar->setStyle(new CustomTabStyle());
return 0;

其中mMdiAreaDock是QMdiArea,m_pMdiAreaTabBar是QTabBar

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-25 12:47:15

看看这段代码:

代码语言:javascript
复制
const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option));
QStyleOptionTab opt(*tab);

optionQStyleOptionTabV2的一个实例。

创建带有复制构造函数的新对象QStyleOptionTab opt时,会丢失扩展QStyleOptionTabV2包含的一些重要数据,包括有关图标的信息。

请使用以下代码:

代码语言:javascript
复制
if (const QStyleOptionTabV2 *tab = qstyleoption_cast<const QStyleOptionTabV2 *>(option))
{
    QStyleOptionTabV2 opt(*tab);
    opt.shape = QTabBar::RoundedNorth;
    QPlastiqueStyle::drawControl(element, &opt, painter, widget);
    return;
}

ps。我使用这段代码为特定选项卡分配了一个图标:

代码语言:javascript
复制
 m_pMdiAreaTabBar->setTabIcon(0, icon);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26019763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档