gpt4 book ai didi

Qt:样式化 QTabWidget

转载 作者:行者123 更新时间:2023-12-04 01:40:48 37 4
gpt4 key购买 nike

我正在使用 Qt,并且在 Qt 设计器编辑器中有一个 QTabWidget 设置,您可以在图 1 中看到它。

picture 1

正如您在 Tab4 之后看到的那样,一直到右边缘有一个空白空间,以某种方式我需要用一种颜色填充该空间,如图 2 所示(最好的是能够设置褪色颜色) .或者另一种解决方案是选项卡 float 以覆盖整个屏幕。

picture 2

我现在使用以下样式表:

QTabWidget::tab-bar {

}

QTabBar::tab {
background: gray;
color: white;
padding: 10px;
}

QTabBar::tab:selected {
background: lightgray;
}

有没有办法使用 Qt 样式表设置 QTabBar 的背景颜色?或者我可以使用 Qt 样式表将标签 float 到边缘吗?

编辑:
我一直在尝试 Caleb Huitt - cjhuitt 在下面建议的解决方案。我真的很喜欢使选项卡展开但无法使其工作的想法。

在 Qt Designer Editor 中,我右键单击我的 QTabWidget->“Promote To ...”并选择“Base class name”:QTabWidget
“提升的类名”:ExpandableTabWidget
然后我点击添加然后推广。

在保存我的 QTabWidget 的小部件的 init 方法中,我设置了
ui.tabWidget->SetTabsExpanding(true);

一切都很好,但 QTabbar 没有扩展。

我做错了什么吗?

谢谢!

最佳答案

扩展选项卡和为背景着色都可以使用样式表来完成。

对于扩展选项卡,可以将样式表应用于选项卡,将其宽度设置为 QTabWidget 总宽度的一小部分。 .由于样式表需要在调整大小时更新,因此使用事件过滤器应用它。请参阅下面的第一个示例代码。

虽然可以设置标签栏的背景,但标签栏不会填满标签 Pane 上方的整个空间。它是显示出来的容器(或父小部件)。要控制该区域的着色,请输入 QTabWidgetQWidget并在容器上设置样式表。请参阅下面的第二个示例代码。

扩展选项卡:

#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();
}

关于Qt:样式化 QTabWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480773/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com