css - Qt 样式表不会立即应用

标签 css qt

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

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

我正在想办法解决这个问题。目前我能想到的最好方法是标记方法,其中消息将包含在语义标记中(例如,所有警告消息将包含在类似 HTML 的标记中以指定它们是警告),并且当控制台窗口的样式应用后,每条消息都将根据新样式重新着色。这显然需要挂接到 QTextEdit 的某些“OnStyleApplied”事件。这是否可能,或者是否有更好的方法来解决这个问题?

最佳答案

如果它真的在消息队列中应用 qstylesheet 更改,请告诉消息队列在您下次调用之前进行处理。

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

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

另一种可行的方法是,您可以专门告诉小部件在需要时应用其样式更改。

前几天我用 qstylesheets 深入研究了一些高级的东西:

QList: Out of memory

注意 polish 的使用和 unpolish在上面的链接中。

但除了所有直接答案之外,您可能还想研究使用为富文本编辑制作的类:

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 类调试字符串表示的自动呈现的所有细节。

希望对您有所帮助。

关于css - Qt 样式表不会立即应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916354/

相关文章:

html - 使用不同类的 CSS 背景图像

javascript - 如何将注意力集中在切换按钮上?

c++ - Qt/从主窗口发送数据到对话框或从主窗口抓取数据?

c++ - 取消选中/选中 QCheckBox 后使 QLabel 不可见/可见

c++ - Qt 按钮处理建议

c++ - 无法在 qtablewidget 单元格中设置文本

css - 以不同的方式对齐多个 flexbox 元素

jquery - CSS float 操作按钮

CSS Media Query 优先覆盖移动设备中的先前样式

python - 使用 PyQt 的组合框中的复选框