双击 QTreeView 展开项目箭头
Double Click on QTreeView Expand Item Arrow
在我的 Qt 5.6.2 项目中,我注意到如果您双击 QTreeView
项目(实际的箭头部分,而不是项目文本),第一次点击切换展开状态,第二次点击点击什么都不做。
我希望第二次点击再次切换展开状态。
我试过 treeView->setExpandsOnDoubleClick(false);
但行为仍然相同,因为它似乎根本不影响项目的箭头部分。看起来 Qt 正在为我决定箭头应该如何对双击做出反应,而不管 属性 expandsOnDoubleClick
。我该如何解决?
(注意:此行为在 Qt 5.0.2 中不存在。不确定 Qt 中间版本。)
我能够通过子类化 QProxyStyle
并检查样式提示 SH_ListViewExpand_SelectMouseType
并返回值 3 而不是默认值 2 来解决这个问题。
class MyProxyStyle : public QProxyStyle
{
public:
int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const
{
if(hint == QStyle::SH_ListViewExpand_SelectMouseType)
return 3;
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
}
在我的 Qt 5.6.2 项目中,我注意到如果您双击 QTreeView
项目(实际的箭头部分,而不是项目文本),第一次点击切换展开状态,第二次点击点击什么都不做。
我希望第二次点击再次切换展开状态。
我试过 treeView->setExpandsOnDoubleClick(false);
但行为仍然相同,因为它似乎根本不影响项目的箭头部分。看起来 Qt 正在为我决定箭头应该如何对双击做出反应,而不管 属性 expandsOnDoubleClick
。我该如何解决?
(注意:此行为在 Qt 5.0.2 中不存在。不确定 Qt 中间版本。)
我能够通过子类化 QProxyStyle
并检查样式提示 SH_ListViewExpand_SelectMouseType
并返回值 3 而不是默认值 2 来解决这个问题。
class MyProxyStyle : public QProxyStyle
{
public:
int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const
{
if(hint == QStyle::SH_ListViewExpand_SelectMouseType)
return 3;
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
}