Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Qt/C+中从QApplication继承样式表+;_C++_Qt_Qtstylesheets - Fatal编程技术网

C++ 如何在Qt/C+中从QApplication继承样式表+;

C++ 如何在Qt/C+中从QApplication继承样式表+;,c++,qt,qtstylesheets,C++,Qt,Qtstylesheets,通过阅读下面的qss文件,我正在使用外部和通用样式表 QFile File("../Stylesheet.qss"); File.open(QFile::ReadOnly); QString StyleSheet = QLatin1String(File.readAll()); pApp->setStyleSheet(StyleSheet); stylesheet.qss很好,并且工作正常 问题 我有一个小部件,初始化时没有父项。像 WorkspaceWindow::WorkspaceW

通过阅读下面的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());
    }
}

为了设置样式表而使用虚拟小部件作为父部件,感觉不太对劲

我会将您的代码更改为:

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

您可以创建类
StylelessWidget
,它在构造函数中执行
setStyleSheet(QString())
,并从中继承或使其成为父类。您是否尝试过
setStyle(qApp->style())
?您可以创建类
stylesswidget
,它在构造函数中执行
setStyleSheet(QString())
,您是否尝试过
setStyle(qApp->style())