Mar*_*tin 11 qt qtstylesheets qtabwidget
我正在使用Qt,我在Qt Designer编辑器中设置了QTabWidget,你可以在图1中看到它.
图1 http://i40.tinypic.com/1109ba1.jpg
正如你在Tab4之后看到的那样,一直有一个空的空间一直到右边缘,在某种程度上我需要用一种颜色填充那个空间,如图2所示(最好的是能够设置褪色的颜色) .或者另一种解决方案是标签浮出来覆盖整个屏幕.
图2 http://i41.tinypic.com/zwmijr.jpg
我现在使用以下样式表:
QTabWidget::tab-bar {
}
QTabBar::tab {
background: gray;
color: white;
padding: 10px;
}
QTabBar::tab:selected {
background: lightgray;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用Qt样式表设置QTabBar的背景颜色?或者我可以使用Qt样式表将标签浮动到边缘?
编辑:我一直在尝试Caleb Huitt - cjhuitt在下面提出的解决方案.我真的很喜欢让标签扩展但无法使其正常工作的想法.
在Qt Designer Editor中,我右键单击我的QTabWidget - >"Promote To ..."并选择"Base class name":QTabWidget"Promoted class name":ExpandableTabWidget然后我单击add然后单击Promote.
在我设置的包含我的QTabWidget的小部件的init方法中
ui.tabWidget->SetTabsExpanding(true);
Run Code Online (Sandbox Code Playgroud)
一切都很好,但QTabbar没有扩展.
难道我做错了什么?
谢谢!
bay*_*ith 17
扩展标签和着色背景都可以使用样式表来完成.
对于展开选项卡,可以将样式表应用于选项卡,这些选项卡将其宽度设置为总宽度的一小部分QTabWidget
.由于样式表需要在调整大小时更新,因此使用事件过滤器应用它.请参阅下面的第一个示例代
虽然可以设置选项卡栏的背景,但选项卡栏不会填充选项卡窗格上方的整个空间.它是显示的容器(或父窗口小部件).要控制该区域的着色,请将QTabWidget
a 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();
}
Run Code Online (Sandbox Code Playgroud)
标签旁边的背景:
#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();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30975 次 |
最近记录: |