随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

Qt QWidgetList::itemClicked不触发

一、概述

  在优化Qt代码的时候发现以前写的List的item的触发事件用的是鼠标事件。而itemClicked信号对应的槽函数onItemClicked函数压根没触发。 

void mousePressEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
void leaveEvent(QEvent* event);

  然后就在回想好好的item点击事件为啥不用,反而用鼠标事件。之后发现是因为做东西着急但是itemClicked函数不触发,所以就用了鼠标事件。

  今天刚好抽空把为啥itemClicked不触发这块给弄一下。

  测试结果发现代码写的并没有什么问题。之所以因为itemClicked事件不触发是因为上面的鼠标事件把把itemClicked事件给屏蔽了。测试的过程中发现只要把鼠标事件屏蔽掉,itemClicked信号只要写对就能触发itemClicked。

  下面记录一下示例及可能遇到的问题。

二、示例

  1.itemClicked信号属于QWidgetList对象,如下

复制代码
Q_SIGNALS:
    void itemPressed(QListWidgetItem *item);
    void itemClicked(QListWidgetItem *item);
    void itemDoubleClicked(QListWidgetItem *item);
    void itemActivated(QListWidgetItem *item);
    void  itemEntered(QListWidgetItem *item);
    // ### Qt 6: add changed roles
    void itemChanged(QListWidgetItem *item);

    void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
    void currentTextChanged(const QString &currentText);
    void currentRowChanged(int currentRow);

    void itemSelectionChanged();
复制代码

  2.有两种方式可以出发itemClicked函数

    a.第一种方式最为简单,使用lambda表达式,此方法的优点是无需定义槽函数

connect(this, &CommonListView::itemClicked, [=](QListWidgetItem* item) {

    CommonListViewItem* item2 = dynamic_cast<CommonListViewItem*>(item);
    qDebug() << "itemPos:" << item2->mPos;


    });

    b.第二种方式是定义一个槽函数,并使用槽函数

//定义槽函数
public
slots: void onItemClicked(QListWidgetItem* item);
//使用槽函数
connect(this, &CommonListView::itemClicked, this,&CommonListView::onItemClicked);

  ps:总结,亲测有效,放心使用。

    

posted on   飘杨......  阅读(598)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2021-11-22 使用PThread+消息队列创建一个生产者消费者模型
2021-11-22 C使用sprintf函数拼接字符串或者字符串和其他数据类型拼接
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示