C++ 如何在Qt/C+中从QApplication继承样式表+;
通过阅读下面的qss文件,我正在使用外部和通用样式表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
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())
?