Qt的:造型QTabWidget
-
21-09-2019 - |
题
我使用Qt和我的Qt设计编辑器QTabWidget设置,你可以看到它的图片1。
正如你可以看到后TAB4有一个空的空间,一直到右边缘,以某种方式,我需要填补这一空间与色彩,就像图片2(最好的事情是要能设置褪色的颜色)。或另一种解决方案是使得突出部浮于覆盖整个屏幕。
我现在使用下面的样式表:
QTabWidget::tab-bar {
}
QTabBar::tab {
background: gray;
color: white;
padding: 10px;
}
QTabBar::tab:selected {
background: lightgray;
}
是否有一种方法来设置使用Qt样式表QTabBar的背景颜色?或者,我可以让标签浮动出使用Qt样式的边缘?
编辑: 我一直在努力的是迦勒Huitt解决方案 - cjhuitt以下建议。我真的很喜欢做的选项卡扩展,但不能让它工作的想法。
在Qt Designer的编辑,我右键单击我的QTabWidget - >“促进......”,然后选择“基本类名”:QTabWidget “促进类名”:ExpandableTabWidget 然后我点击添加,然后促进。
在微件的init方法保持我QTabWidget我设置
ui.tabWidget->SetTabsExpanding(true);
一切都构建精细但QTabbar不展开。
我是不是做错了什么?
谢谢!
解决方案
这两个扩展分页和着色的背景可以使用样式表来实现。
有关扩展标签,样式表可以应用于其设定其宽度与QTabWidget
的总宽度的一小部分的选项卡。因为样式表将需要在大小调整被更新,它是使用事件过滤器施加。参见下面第一个示例代码。
虽然标签栏的背景可以被设置,选项卡栏不填充的标签窗格上方的整个空间。它是容器(或父窗口部件),其示出通过。以控制该区域的着色,就把QTabWidget
在QWidget
和设置在容器上的样式表。请参见下面的第二实施例的代码。
扩展标签:
#include <QtGui>
// Sets the style sheet of the QTabWidget to expand the tabs.
static void expandingTabsStyleSheet(QTabWidget *tw)
{
tw->setStyleSheet(QString("QTabBar::tab { width: %1px; } ")
.arg(tw->size().width()/tw->count()));
}
// On resize events, reapply the expanding tabs style sheet
class ResizeFilter : public QObject
{
QTabWidget *target;
public:
ResizeFilter(QTabWidget *target) : QObject(target), target(target) {}
bool eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::Resize)
expandingTabsStyleSheet(target);
return false;
}
};
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QTabWidget *tw = new QTabWidget;
tw->installEventFilter(new ResizeFilter(tw));
tw->addTab(new QWidget, "Tab1");
tw->addTab(new QWidget, "Tab2");
tw->addTab(new QWidget, "Tab3");
tw->show();
return app.exec();
}
突片旁背景:
#include <QtGui>
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QWidget *container = new QWidget;
container->setStyleSheet("background: qlineargradient( x1: 0, y1: 0, x2: 1, y2
: 0, stop: 0 black, stop: 1 blue);");
QHBoxLayout *layout = new QHBoxLayout(container);
layout->setContentsMargins(0, 0, 0, 0);
QTabWidget *tw = new QTabWidget(container);
layout->addWidget(tw);
tw->setStyleSheet(
"QTabBar::tab { background: gray; color: white; padding: 10px; } "
"QTabBar::tab:selected { background: lightgray; } "
"QTabWidget::pane { border: 0; } "
"QWidget { background: lightgray; } ");
tw->addTab(new QWidget, "Tab1");
tw->addTab(new QWidget, "Tab2");
tw->addTab(new QWidget, "Tab3");
container->show();
return app.exec();
}
其他提示
在我看来,你有两个选择,这取决于你想要做什么。
要填充颜色的背景强>
取的标签窗口小部件的该部分的透明度的优点。
QWidget *bg = new QWidget( parent );
bg->setAutoFillBackground( true );
QPalette bg_palette = bg->palette();
bg_palette.setColor( QPalette::Window, QColor( "orange" ) );
bg->setPalette( bg_palette );
QHBoxLayout layout = new QHBoxLayout();
layout->setMargin( 0, 0, 0, 0 );
layout->setSpacing( 0 );
bg->setLayout( layout );
QTabWidget *tab_widget = new QTabWidget();
// set up tab_widget however you want...
layout->addWidget( tab_widget );
这使得BG部件所有橙色,但由于大多数的标签控件的绘制将在BG小部件,您只能看到橙色其中标签控件不画。
要使凸片展开:强>
我想这将是比它更容易,但你基本上要继承QTabWidget才能访问它采用了标签栏小工具。
class ExpandableTabWidget : public QTabWidget
{
Q_OBJECT;
Q_PROPERTY( bool expanding_tabs READ Expanding WRITE SetExpanding );
public:
ExpandableTabWidget( QWidget *parent = NULL ) : QTabWidget( parent )
{
}
bool Expanding() const
{
return tabBar()->expanding();
}
void SetTabsExpanding( bool expanding = true )
{
tabBar()->setExpanding( expanding );
}
};
您会那么要么需要让你的ExpandableTabWidget
类转换成插件和设计师使用它,或者你可以宣传你的标签控件的类型为ExpandableTabWidget
,并在代码中设置扩大值。如果你选择做推广,你不会看到你在设计师想要的结果,但你会当你运行你的程序。
在QT 4.5有控制的标签窗口小部件呈现,称为一个新的属性的 documentMode 即可。只要调用tabWidget->setDocumentMode(true)
以及使用该样式表设置QTabBar的背景颜色。
从Qt文档:
这个属性保存在适合文档页的模式的标签窗口小部件是否被呈现。这是相同的Mac OS X上的文件模式。
当此属性设置的标签窗口小部件帧不呈现。此模式是用于表示将页面覆盖了大部分的标签窗口小部件区域的文档类型的网页是有用的。
我前一段时间有同样的问题。我通过使“大”顶部边界,并与移动余量标签栏实现它