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