【发布时间】:2016-08-06 06:28:58
【问题描述】:
我正在尝试读取所有小部件的全局样式表并将其应用于 QApplication 实例。
这可以正确设置所有小部件的样式,除了我无法在主窗口构造函数及其子小部件的构造函数中查询样式选项,如字体和字体大小,因为此时样式表尚未应用于它。
所以我需要:
- 要么使全局样式表在主窗口构造函数中可用;
- 在应用样式表时捕获小部件中的事件。
有没有办法实现其中之一?
我的主窗口代码如下:
int main(int argc, char **argv)
{
QWSServer::QWSServer::setBackground(QBrush(QColor(0, 0, 0, 255)));
QApplication app(argc, argv);
QFile stylesheet("/usr/bin/app.qss");
stylesheet.open(QFile::ReadOnly|QFile::Text);
QTextStream styleSheetStyle(&stylesheet);
app.setStyleSheet(styleSheetStyle.readAll());
MainWindow * pWindow = new MainWindow();
pWindow->setWindowFlags(Qt::FramelessWindowHint);
pWindow->show();
return app.exec();
}
在需要样式的小部件中:
void paintText(QPixmap *target, const QString &text)
{
QPainter painter(target);
painter.setPen(QColor(184,188,193,255));
painter.setFont(property("font").value<QFont>());
style()->drawItemText(&painter,
target->rect().adjusted(0,0,0,-15),
Qt::AlignHCenter|Qt::AlignBottom,
QPalette(QColor(184,188,193,255)),
true,
text);
painter.end();
}
如果在小部件的构造函数中调用了该绘制函数,则字体为默认值,如果在显示事件中调用,则字体为全局样式表指定的字体。
但是那个函数只需要调用一次,所以我不想在 show 事件中绘制它,即使我可以使用一个标志让它只在第一个 show 事件上运行。
【问题讨论】: