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