如何在项目编辑期间清除QTreeView中的背景?

时间:2013-10-23 18:37:01

标签: c++ qt qtreeview qtgui

使用可编辑的QAbstractItemModel,我发现在编辑时不会删除旧文本,从而产生难看的叠加效果。

我可以使用Qt中的Editable Tree Model Example重现这一点(点击项目,点击F2,点击结束,点击退格几次)。下面的屏幕截图显示了编辑过程中的项目,“已打开信号”的文本已被删除。它就像一个叠加层。旧文本位于背景中(白色为蓝色),上方显示当前文本位于顶部(黑色为蓝色)。

QTreeView while deleting a suffix

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

QTreeView overlay during editing

截图来自Fedora 19系统,运行gnome shell。我仍然可以在Fedora 23下重现这一点。

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

我可以解决这个问题吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在修复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;}");
  }
  // ...
}