如何在项目编辑过程中清除QTreeView中的背景?

如何在项目编辑过程中清除QTreeView中的背景?

问题描述:

玩了一个可编辑的QAbstractItemModel,我注意到旧的文本在编辑时不会被删除,因此会产生丑陋的叠加效果。我可以用Qt中的Editable Tree Model Example重复此操作(单击项目,点击F2,点击结束,点击退格几次)。下面的屏幕截图显示了编辑过程中的一个项目,“带有信号的”文本已被删除。它就像一个覆盖。旧文本在背景中(白色为蓝色),高于当前文本在顶部(黑色为蓝色)。如何在项目编辑过程中清除QTreeView中的背景?

QTreeView while deleting a suffix

相同效果时删除/插入字符:

QTreeView overlay during editing

屏幕截图来自一个Fedora 19系统中,运行侏儒壳。我仍然可以在Fedora 23下重现此问题。

这是gnome shell(样式名称:'gtk +')使用的默认style中的错误还是包装错误?

我可以解决这个问题吗?

当明确使用其他样式(例如./editabletreemodel -style windows-style fusion)时,背景在编辑过程中被正确清除。

+1

我认为,这个问题是,在你的情况下,'QLineEdit'具有透明背景。你可以尝试设置一个样式表,比如'QLineEdit {background-color:white;}' – thuga

+0

@thuga,是的。发表您的评论作为答案,我会接受它。非常优雅的解决方法。 – maxschlepzig

+0

我发表了我的评论作为答案。 – thuga

问题是,在你的情况下,QLineEdit有一个透明的背景。您可以尝试设置样式表,如QLineEdit{background-color: white;}

+0

为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;}"); 
    } 
    // ... 
}