如何在项目编辑过程中清除QTreeView中的背景?
玩了一个可编辑的QAbstractItemModel
,我注意到旧的文本在编辑时不会被删除,因此会产生丑陋的叠加效果。我可以用Qt中的Editable Tree Model Example重复此操作(单击项目,点击F2,点击结束,点击退格几次)。下面的屏幕截图显示了编辑过程中的一个项目,“带有信号的”文本已被删除。它就像一个覆盖。旧文本在背景中(白色为蓝色),高于当前文本在顶部(黑色为蓝色)。如何在项目编辑过程中清除QTreeView中的背景?
相同效果时删除/插入字符:
屏幕截图来自一个Fedora 19系统中,运行侏儒壳。我仍然可以在Fedora 23下重现此问题。
这是gnome shell(样式名称:'gtk +')使用的默认style中的错误还是包装错误?
我可以解决这个问题吗?
当明确使用其他样式(例如./editabletreemodel -style windows
或-style fusion
)时,背景在编辑过程中被正确清除。
问题是,在你的情况下,QLineEdit
有一个透明的背景。您可以尝试设置样式表,如QLineEdit{background-color: white;}
。
为Qt应用程序设置样式表很容易通过'-stylesheet FILENAME'选项进行测试。例如:'echo QLineEdit,QDateTimeEdit {background-color:white;}> white.css; ./editabletreemodel -stylesheet white.css'。 – maxschlepzig
直到GTK + Qt的风格是固定的,一个可以解决这一个样式表是这样的:
#include <QApplication>
#include <QStyle>
int main(int argc, char **argv)
{
QApplication a(argc, argv);
// ...
if (QApplication::style()
&& QApplication::style()->objectName() == "gtk+"
&& qApp->styleSheet().isEmpty()) {
qApp->setStyleSheet(
"QLineEdit, QAbstractSpinBox {background-color:white;}");
}
// ...
}
我认为,这个问题是,在你的情况下,'QLineEdit'具有透明背景。你可以尝试设置一个样式表,比如'QLineEdit {background-color:white;}' – thuga
@thuga,是的。发表您的评论作为答案,我会接受它。非常优雅的解决方法。 – maxschlepzig
我发表了我的评论作为答案。 – thuga