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

标签 c++ qt qtstylesheets

我正在通过读取 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/

相关文章:

iphone - 是否有像 glFont 这样方便的 OpenGL-ES 2 字体库?

c++ - temp2->next 包含什么?

c++ - Googletest - DeathTest 无法捕获来自 Qt 应用程序的断言,例如 Q_ASSERT 等。

c++ - 如何在 QDialog 中显示 QMainWindow

c++ - 如何使用 HTML 格式和可点击的单元格制作快速的 QTableView?

c++ - 使用属性选择器的整个应用程序的QT StyleSheet主题

c++ - 书籍示例在类声明中使用 "explicit"关键字。无效吗?

c++ - 简单的类 MPL 类型映射模板

python - PySide (Qt) 信号未到达我的插槽

qt - 是否可以在 Qt Creator 中将 Qt 样式表与提升的小部件一起使用?