如何在树状视图中获得鼠标左键单击事件

时间:2019-06-06 10:00:13

标签: qt qt5

我已经用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的新手,所以我不确定是否将树形视图的连接方式与将按钮连接到所单击的插槽的方式相同。

1 个答案:

答案 0 :(得分:1)

您应该始终检查连接:

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

如果这样做,您会发现连接到clicked()信号无效。

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

要么将它们放在此处,但仅将类型而不包含参数名称

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

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

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

如果信号或插槽不存在,这将为您提供编译器错误。