【发布时间】:2011-06-15 16:23:31
【问题描述】:
这是同一个问题: How to change text alignment in QTabWidget?
我试图将该 python 代码移植到 C++ 中,但它似乎不起作用。
这是头文件:
#include <QTabBar>
class HorizontalTabWidget : public QTabBar
{
Q_OBJECT
public:
explicit HorizontalTabWidget(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *);
QSize sizeHint() const;
};
这里是源文件:
void HorizontalTabWidget::paintEvent(QPaintEvent *)
{
for(int index = 0; index < count(); index++)
{
QPainter * painter = new QPainter(this);
painter->begin(this);
painter->setPen(Qt::blue);
painter->setFont(QFont("Arial", 10));
QRect tabrect = tabRect(index);
painter->drawText(tabrect, Qt::AlignVCenter | Qt::TextDontClip, tabText(index));
painter->end();
}
}
QSize HorizontalTabWidget::sizeHint() const
{
return QSize(130, 130);
}
我通过创建继承 QTabWidget 的 NewTabWidget 类来使用它。在我使用的 NewTabWidget 的构造函数中:
setTabBar(new HorizontalTabWidget);
这样做只是为了能够使用该 tabWidget,因为 setTabBar 是受保护的。这是我得到的:
我错过了什么?
编辑: 我想要创建的是这个,但顶部有图标,图标下有标签(如在 Qt Creator 中):
【问题讨论】:
-
您希望它是什么样子?你对 Qt::AlignVCenter 有什么期待?
-
是关于“CustomerList”文本的吗?如果你想居中,你应该使用 AlignHCenter。如果选项卡的实际顺序是垂直的,我不会将此类称为“HoriontalTabWidget”。 (我认为这种通常被称为AcoordionTab)
-
您可以在由图标定义的 QRect 上绘制文本,如stackoverflow.com/questions/4270229/… 中所述。如果您的最后一次编辑是您当前代码的实际结果,那么您可以添加painter->rotate(90) 作为最后一步。
-
最后的编辑是我使用QTabWidget而不改变paintEvent()的截图。
-
从您提到的那个问题中:“解决了!刚刚更改了 tabSizeHint 中的方法 sizeHint 并且效果很好:)”这是 Qt Creator 中使用的选项卡小部件的源代码:qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/plugins/…@ 987654324@
标签: c++ qt qt4 qtabwidget