gpt4 book ai didi

c++ - Qt/C++中如何从QApplication继承样式表

转载 作者:行者123 更新时间:2023-11-28 02:05:02 24 4
gpt4 key购买 nike

我正在通过读取 qss 文件来使用外部和通用样式表,如下所示

QFile File("../Stylesheet.qss");
File.open(QFile::ReadOnly);
QString StyleSheet = QLatin1String(File.readAll());
pApp->setStyleSheet(StyleSheet);

stylesheet.qss 很好用

问题
我有一个没有父级初始化的小部件。喜欢

WorkspaceWindow::WorkspaceWindow(WorkspaceWindow* pWorkspaceWindow)
: QWidget()
{}

因为此样式表不适用于 WorkspaceWindow 及其子部件。

我的方法
我创建了一个从 QWidget 继承的虚拟类,并在构造函数中为此类设置了样式表。

class PrimaryWidget:public QWidget;

PrimaryWidget::PrimaryWidget()
{
QFile File("../Stylesheet.qss");
File.open(QFile::ReadOnly);
QString StyleSheet = QLatin1String(File.readAll());
setStyleSheet(StyleSheet);
}

static PrimaryWidget& get()
{
static PrimaryWidget obj;
return obj;
}

现在我正在使用 WorkspaceWindow 作为

WorkspaceWindow::WorkspaceWindow(WorkspaceWindow* pWorkspaceWindow)
: QWidget(&PrimaryWidget::get())
{}

现在它工作正常。

问题
如何才能避免这种情况?我可以使用 QApplication 对象为孤立对象(如 WorkspaceWindow)初始化样式表吗?或使 WorkspaceWindow 成为 QApplication 的子对象(某种)?

最佳答案

为了设置样式表的灵魂目的而使用虚拟小部件作为父部件感觉不对。

我会将您的代码更改为:

namespace myApp
{
QString styleSheet()
{
QFile file("../Stylesheet.qss");
file.open(QFile::ReadOnly);
const QString styleSheet = QLatin1String(File.readAll());
return styleSheet;
}
}

在你的小部件的构造函数中简单地:

WorkspaceWindow::WorkspaceWindow(WorkspaceWindow* pWorkspaceWindow, QWidget *parent)
: QWidget(parent)
{
if (parent == Q_NULLPTR) {
setStyleSheet(myApp::styleSheet());
}
}

关于c++ - Qt/C++中如何从QApplication继承样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37852457/

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