【问题标题】:How to get left mouse click event in Tree View如何在树视图中获取鼠标左键单击事件
【发布时间】:2019-06-06 10:00:13
【问题描述】:

我已经用 QAbstractItemModel 实现了一个 QTreeview,如果我用鼠标左键单击树视图项目,我如何得到通知。我们是否有任何类似 OnLButtonDown() 的函数可用于树视图。

WavefrontRenderer::WavefrontRenderer(TreeModel* model , QWidget *parent) : 
QMainWindow(parent)
 {
    setupUi(this);  
    treeView->setModel(model);
    treeView->setDragEnabled(true);
    treeView->setAcceptDrops(true);
    treeView->installEventFilter(this);   
    connect(pushButtonAddGroup, SIGNAL(clicked()), this, SLOT(insertRow()));
     connect(pushButtonAddChild , SIGNAL(clicked()), this, 
    SLOT(insertChild()));
    connect(pushButtonDeleteGroup , SIGNAL(clicked()), this, 
    SLOT(removeRow()));
    connect( ButtonSphere, SIGNAL(clicked()), this, SLOT(AddSphere()));
    connect(treeView , SIGNAL(clicked()), this, SLOT(message()));   
 }

我尝试将树视图连接到单击的插槽,但这对我不起作用。

由于我是 qt 的新手,我不确定我们连接树视图的方式是否与将按钮连接到单击的插槽的方式相同。

【问题讨论】:

  • 你有clicked 信号。
  • 如何将它连接到树视图?
  • 我试过 connect(treeView , SIGNAL(clicked()), this, SLOT(message()));
  • 对我不起作用。
  • 请编辑您的问题以显示您迄今为止尝试过的代码,并更清楚地解释您想要实现的目标。

标签: qt qt5


【解决方案1】:

你应该经常检查你的连接:

bool ok = connect(...);
Q_ASSERT(ok);

如果你这样做,你会发现连接到clicked() 信号不起作用。

如果您随后查看错误控制台,您会看到一条 Qt 消息,指出在 QTreeView 中找不到信号 clicked()
这是因为 参数 需要包含在 SIGNAL(...) 宏中。

要么把它们放在那里只是没有参数名称的类型

bool ok = connect(treeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(message()));

或者通过使用new connect syntax来避免这个陷阱:

bool ok = connect(treeView, &QAbstractItemView::clicked, this, &WavefrontRenderer::message);

如果信号或槽不存在,这会给你一个编译器错误。

【讨论】:

  • 非常感谢马丁它适用于新语法,我有一个问题为什么它不适用于旧语法。
  • 甚至其他按钮都使用旧语法。
  • 比较函数签名:void QAbstractItemView::doubleClicked(const QModelIndex &index)QModelIndex const & 这是强制,但void QAbstractButton::clicked(bool checked = false)bool 有一个默认值.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多