Qt样式表不会立即应用

时间:2013-11-11 21:31:27

标签: css qt

我的Qt应用程序中有一个控制台窗口,其输出窗口是专门的 QTextEdit ,输出在从 QLineEdit 解析命令后处理的消息,然后执行由主程序。窗口可以输出正常的消息,警告以及(如果需要)多种6种不同自定义颜色的文本。所有8种不同类型的文本的颜色都由8种不同的 QProperties 定义,类型为 QColor; 这些颜色与输出窗口的其余部分的样式一起设置,通过使用加载时应用于 QApplication 的QSS文件。要以特定颜色书写文本,在插入文本之前,在 QTextEdit 上调用 setTextColor 。 (另外,在 QTextEdit 上调用时, moveCursor 会出现重置要插入默认颜色的文本的颜色,而不管之前设置的是什么,但是我确保在调用 moveCursor 之后和调用 insertPlainText之前立即设置所需的文本颜色。

我遇到的问题是,出现(据我所知)通过 qApp-> setStyleSheet 应用的样式在处理消息队列之前实际上并未应用。当程序启动时,它应用样式表,不久之后,硬编码的测试消息被发送到控制台窗口,显示上次编译的日期和时间。此消息最终以原始 QTextEdit 颜色(黑色)打印,在应用样式表中的黑色背景颜色后,该颜色不可见。问题并不像应用样式时设置控制台窗口的标准文本颜色那么简单,因为在样式生效之前可能会将任意数量的消息发送到控制台窗口,从而产生任意数量的不同颜色的消息。

我正在考虑解决此问题的最佳方法。我现在能想到的最好方法是一种标记方法,其中消息将被包含在语义标记中(例如,所有警告消息都将包含在类似HTML的标记中以指定它们是警告),以及何时控制台窗口的样式应用每个消息将根据新样式重新着色。这显然需要挂钩到 QTextEdit的一些“OnStyleApplied”事件。这是可能的,还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果它确实在消息队列中应用qstylesheet更改,请在下次调用之前告知消息队列处理。

http://qt-project.org/doc/qt-5.0/qtcore/qcoreapplication.html#processEvents

您甚至可以指定应处理的事件类别。

另一种应该有效的方法是,您可以明确告诉窗口小部件在您需要时应用其样式更改。

我前几天用qstylesheets深入研究了一些高级内容:

QList: Out of memory

请注意在上面的链接中使用polishunpolish

但除了所有直接答案之外,您可能希望研究使用为富文本编辑而创建的类:

http://qt-project.org/doc/qt-5.0/qtgui/richtext.html

结构经过深思熟虑,你可以用它们做很多事情。有一个学习曲线可以解决它们,但效果很好。

这与你所说的有关......

此外,Qt还有一个简洁的工具:

http://qt-project.org/doc/qt-5.0/qtcore/qtglobal.html#qInstallMessageHandler

当你将它与<some text editor/viewer class qt has>.append();结合使用时,当你想要添加文本时,你可以使用qDebug() <<调用,并获得插入空格,换行符和自动渲染的所有细节。许多Qt类调试字符串表示。

希望有所帮助。