如何在项目编辑期间清除 QTreeView 中的背景?
Posted
技术标签:
【中文标题】如何在项目编辑期间清除 QTreeView 中的背景?【英文标题】:How to clear background in QTreeView during item-edit? 【发布时间】:2013-10-23 18:37:00 【问题描述】:玩弄一个可编辑的QAbstractItemModel
,我注意到旧文本在编辑时不会被删除,因此会产生难看的叠加效果。
我可以使用 Qt 中的 Editable Tree Model Example 重现此内容(单击项目,按 F2,按 End,按几次退格键)。下面的屏幕截图显示了编辑过程中的一个项目,文本“with signals on”已被删除。它就像一个叠加层。旧文本在背景中(蓝底白字),当前文本在上面(蓝底黑字)。
删除/插入字符时效果相同:
屏幕截图来自 Fedora 19 系统,运行 gnome shell。我仍然可以在 Fedora 23 下重现它。
这是用于 gnome shell 的默认 style 中的错误(样式名称:'gtk+')还是打包错误?
我可以解决这个问题吗?
当明确使用其他样式(例如./editabletreemodel -style windows
或-style fusion
)时,背景会在编辑过程中正确清除。
【问题讨论】:
我认为,问题在于在您的情况下,QLineEdit
具有透明背景。您可以尝试设置样式表,例如QLineEditbackground-color: white;
@thuga,是的,这行得通。发表您的评论作为答案,我会接受。非常优雅的解决方法。
我发表了我的评论作为答案。
另见 QTBUG:While editing an item in an itemview the old text stays visible in the background
【参考方案1】:
问题在于,在您的情况下,QLineEdit
具有透明背景。您可以尝试设置类似QLineEditbackground-color: white;
的样式表。
【讨论】:
可以通过-stylesheet FILENAME
选项轻松测试为Qt 应用程序设置样式表。例如:echo QLineEdit, QDateTimeEdit background-color: white; > white.css ; ./editabletreemodel -stylesheet white.css
.【参考方案2】:
在 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;");
// ...
【讨论】:
以上是关于如何在项目编辑期间清除 QTreeView 中的背景?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 QTreeView 以在使用箭头键移动时保留多项选择
在 PySide 的 QTreeView 中更改时如何获取项目的先前名称
以编程方式检查QAbstractItemModel / QTreeView中的项目