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 ¤tText); 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:总结,亲测有效,放心使用。
分类:
Qt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2021-11-22 使用PThread+消息队列创建一个生产者消费者模型
2021-11-22 C使用sprintf函数拼接字符串或者字符串和其他数据类型拼接