我的 Qt 应用程序中有一个控制台窗口,其输出窗口是专门的QTextEdit ,输出在从QLineEdit解析命令并随后由主程序执行后处理的消息。该窗口可以以 6 种不同的自定义颜色输出正常消息、警告和(如果需要)文本。所有 8 种不同类型的文本都有它们的颜色,由 8 个QColor类型的不同QProperties定义;这些是通过在加载时应用到QApplication的 QSS 文件与输出窗口的其余样式一起设置的。要以某种颜色编写文本,请在QTextEdit上调用setTextColor就在插入文本之前。(顺便说一句,在QTextEdit上调用moveCursor似乎会将要插入的文本的颜色重置为默认颜色,而不管它之前设置了什么,但我确保在调用后立即设置所需的文本颜色moveCursor和调用insertPlainText 之前。)
我遇到的问题是(据我所知)通过qApp->setStyleSheet应用的样式在处理消息队列之前实际上并没有应用。当程序启动时,它会应用样式表,然后很快就会将硬编码的测试消息发送到控制台窗口,显示上次编译的日期和时间。此消息最终打印在原始QTextEdit中颜色(黑色),在样式表中应用黑色背景色后不可见。问题并不像在应用样式时设置控制台窗口的标准文本颜色那么简单,因为在样式生效之前可能会向控制台窗口发送任意数量的消息,从而导致任意数量的不同颜色的消息。
我试图想出解决这个问题的最佳方法。目前我能想到的最好方法是一种标记方法,其中消息将包含在语义标签中(例如,所有警告消息都将包含在类似 HTML 的标签中以指定它们是警告),以及当控制台窗口的样式应用每条消息将根据新样式重新着色。这显然需要挂钩到QTextEdit 的一些“OnStyleApplied”事件。这是可能的,还是有更好的方法来解决这个问题?