0
我有自定義Qtabbar的QMdiarea獲得水平標籤,而不是垂直的標籤是這樣的: http://www.qtcentre.org/wiki/index.php?title=Customizing_QTabWidget%27s_QTabBarQT定製將QStyle爲QTabBar和QIcon
但我想在我的QTabBar插入圖標。 如果我將自定義樣式應用於我的QTabBar,我的圖標不會出現。 如果我不申請,我的圖標出現。
這裏我自定義樣式:
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);
}
};
和我申請我的風格是這樣的:
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
謝謝你,它工作正常:) – Zennoi 2014-09-26 14:27:46