Qt中處理多個同類型對象共享槽函數應用

一.Qt中處理多個同類型對象共享槽函數應用場景

數字鍵盤按鈕處理

動態生成的控件管理

工具欄按鈕響應

游戲中的網格點擊處理

使用時需特別注意對象生命周期管理和類型安全,現代Qt開發中更推薦使用Lambda表達式替代sender()機制。

二.示例

1.本文示例功能

???在ui界面添加5個(可以更多)button控件,然后在一個click槽函數里面響應操作,這樣可以使代碼更簡潔,尤其是botton更多的時候。

???

2.代碼:方式一 ?

(1).mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QPushButton>

#define MAX_NUM_SIZE 5

QT_BEGIN_NAMESPACE

namespace Ui {

class MainWindow;

}

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

????Q_OBJECT

public:

????MainWindow(QWidget *parent = nullptr);

????~MainWindow();

private slots:

????void slot_multi_btn_clicked();

private:

????Ui::MainWindow *ui;

????QPushButton *btnConn[MAX_NUM_SIZE];

};

#endif // MAINWINDOW_H

(2).mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)

????: QMainWindow(parent)

????, ui(new Ui::MainWindow)

{

????ui->setupUi(this);

????btnConn[0]=ui->pushButton;

????btnConn[1]=ui->pushButton_2;

????btnConn[2]=ui->pushButton_3;

????btnConn[3]=ui->pushButton_4;

????btnConn[4]=ui->pushButton_5;

????for (int i=0;i<MAX_NUM_SIZE;i++) {

????????connect(btnConn[i],SIGNAL(clicked()),this,SLOT(slot_multi_btn_clicked()));

????}

}

MainWindow::~MainWindow()

{

????delete ui;

}

void MainWindow::slot_multi_btn_clicked()

{

????int ret;

????QObject *obj = sender();

????QPushButton *btn = dynamic_cast<QPushButton *>(obj);

????for (int i=0;i<MAX_NUM_SIZE;i++)

????{

????????if(btn == btnConn[i])

????????{

????????????qDebug()<<"slot_multi_btn_clicked: i=" <<i;

????????}

????}

}

2.代碼:方式二(QT6 推薦)

mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)

????: QMainWindow(parent)

????, ui(new Ui::MainWindow)

{

????ui->setupUi(this);

????btnConn[0]=ui->pushButton;

????btnConn[1]=ui->pushButton_2;

????btnConn[2]=ui->pushButton_3;

????btnConn[3]=ui->pushButton_4;

????btnConn[4]=ui->pushButton_5;

????// 使用Lambda表達式捕獲上下文

????for(int i=0; i<MAX_NUM_SIZE; i++){

????????connect(btnConn[i], &QPushButton::clicked, this, [this, i](){

????????????// 直接使用索引i操作

????????????multi_btn_clicked(i);

????????});

????}

????

}

MainWindow::~MainWindow()

{

????delete ui;

}

void MainWindow::multi_btn_clicked(int i)

{

????qDebug()<<"slot_multi_btn_clicked two: i=" <<i;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913944.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913944.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

康養休閑旅游服務實訓室建設方案:理實一體化的產教融合方案

一、康養休閑旅游服務實訓室建設方案建設原則對接行業真實場景&#xff1a;實訓環境與設備設施嚴格參照健康咨詢、旅行社及相關服務、住宿業、餐飲業等行業的真實職業場景搭建&#xff0c;確保實訓項目與崗位工作內容高度匹配&#xff0c;實現工學結合、理實一體化教學。融合前…

微服務架構的演進:邁向云原生——Java技術棧的實踐之路

隨著云計算技術的快速發展&#xff0c;微服務架構正逐步向云原生&#xff08;Cloud Native&#xff09;演進。云原生不僅是一種技術體系&#xff0c;更是一種開發和運維理念的革新。本文將以Java技術棧為例&#xff0c;結合Kubernetes&#xff08;K8s&#xff09;、服務網格&am…

CVE-2025-32463復現

目錄背景知識chroot環境chroot 環境的具體表現Name Service Switch (NSS)機制漏洞簡介環境搭建復現POC分析防御方法參考文章&#xff1a;背景知識 chroot環境 &#xff08;全稱“change root”&#xff09;是一種Unix/Linux系統中的隔離技術&#xff0c;其核心作用是將進程的…

原生微信小程序研發,如何對圖片進行統一管理?

目標&#xff1a; 統一在配置文件中管理圖片&#xff0c;用變量存儲&#xff0c;換圖標時只需修改鏈接即可&#xff0c;無需更改業務代碼&#xff0c;且方便查找。tips: 不建議在 asset 中存儲大量圖片&#xff0c;原因是官方要求小程序內存要限制在2M以內&#xff0c;圖片放多…

Escrcpy(手機投屏) v1.27.2 便攜版

Escrcpy 是一款強大的工具&#xff0c;它允許用戶通過圖形化的 Scrcpy 界面來顯示和控制他們的 Android 設備。這款應用程序由 Electron 作為其底層框架驅動。Escrcpy 無需任何賬戶就可以使用&#xff0c;無需擔心隱私或安全問題。Escrcpy沒有廣告&#xff0c;完全免費開源。軟…

element-plus表單校驗失敗問題

一、問題&#xff1a;做表單校驗時&#xff0c;自定義校驗和常規校驗都失敗&#xff0c;自定義校驗時無法拿到value值。二、原因&#xff1a;1、變量名稱那沒有綁定prop。如果是常規校驗&#xff0c;沒綁定prop的話&#xff0c;在確定按鈕時&#xff0c;valid都是true。2、自定…

jmeter做跨線程組

多線程通常會將不同的業務邏輯分配到不同的線程組中。為什么要做多線程&#xff1a;模擬真實世界場景&#xff1a;在實際應用中&#xff0c;服務器通常需要同時處理來自多個用戶的請求。通過多線程&#xff0c;JMeter可以模擬這種并發用戶的行為&#xff0c;更準確地反映出應用…

SQL實戰:多表查詢篇

文章目錄多表查詢創建練習用的數據庫鏈接/連接查詢交叉連接自然連接內連接(取交集)外連接左外連接/右外連接自連接子查詢聯合查詢總結數據庫的備份和恢復命令行操作多表查詢 -- 獲得 alice的 部門所在城市 select * from staff where namealice; -- 獲得dept_id1 select city …

交通銀行基于HarmonyOS數字盾服務,實現大額轉賬安全

在近日落幕的華為開發者大會2025&#xff08;6月20日-6月22日&#xff09;上&#xff0c;交通銀行作為HarmonyOS安全合作的關鍵伙伴受邀出席。在大會的主題演講上介紹了交通銀行基于HarmonyOS SDK設備安全服務&#xff08;Device Security Kit&#xff09;中的數字盾服務&#…

加密狗硬復制的方法

加密狗硬復制方法概述&#xff1a;Greer82加密狗&#xff08;Dongle&#xff09;是一種硬件加密設備&#xff0c;用于軟件版權保護。硬復制是指通過物理手段復制加密狗的硬件信息&#xff0c;通常涉及破解或仿制。需要注意的是&#xff0c;未經授權的復制可能涉及法律風險&…

家庭網絡中的服務器怎么對外提供服務?

家庭網絡中的服務器怎么對外提供服務&#xff1f;方案1 DDNS&#xff08;家庭網絡需要有公網ip&#xff09;方案2 內網穿透&#xff08;需要有一臺公網ip的服務器&#xff09;方案1 DDNS&#xff08;家庭網絡需要有公網ip&#xff09; 怎么判斷是否有公網ip&#xff1f;大致的流…

UnrealEngine5游戲引擎實踐(C++)

目錄 目錄 目錄 Unreal Engine 是什么? Unreal Engine 5 簡介 核心技術特性 應用場景擴展 兼容性與生態系統 Unreal Engine安裝 下載 Epic Games Launcher 啟動 Unreal Engine 選擇安裝版本和路徑 選擇組件 開始安裝 驗證安裝 配置項目模板(可選) 更新和插件…

web滲透sql注入4之PostgreSQL

web滲透sql注入4之PostgreSQLPostgreSQL數據庫特性&#xff1a;基于角色的訪問控制&#xff0c;支持超級用戶&#xff0c;需安裝 plpgsql 擴展方可執行命令&#xff0c;可通過 COPY命令或自定義函數實現權限判斷白盒看代碼&#xff0c;黑盒通過構造特殊查詢語句探測數據庫權限權…

2025年7月:打cs1.5 600元裝機臺式電腦方案A

打cs1.5 600元裝機方案A&#xff1a;有需要的小伙伴可以收藏哈&#xff0c;目前我沒有機會實測效果&#xff0c;理論值是ok無壓力的&#xff0c;大家 有機會配置后的&#xff0c;也可以自行測試下CS1.5的FPS值穩定否哈哈。 打cs1.5 600元裝機方案A&#xff1a; 點擊查看詳細內…

人大金倉下載安裝教程總結

文章目錄前言背景&#xff1a; 工作中進行信創改造&#xff0c;需要把mysql&#xff0c;postgresql數據遷移到人大金倉一、人大金倉是什么&#xff1f;二、使用場景三、下載安裝教程四、優勢五、環境及要求六、工具以及詞匯介紹總結前言 背景&#xff1a; 工作中進行信創改造&…

WebDAV與內網穿透的協同創新:Joplin私有云同步架構深度解析

文章目錄前言1. 檢查群暉Webdav 服務2. 本地局域網IP同步測試3. 群暉安裝Cpolar工具4. 創建Webdav公網地址5. Joplin連接WebDav6. 固定Webdav公網地址7. 公網環境連接測試前言 在遠程辦公場景持續深化的數字化時代&#xff0c;數字筆記工具已從單純的記錄載體進化為知識管理的…

html的outline: none;

outline: none; 是一條 CSS 樣式規則&#xff0c;用來取消元素獲得焦點時的默認輪廓線&#xff08;outline&#xff09;。&#x1f50d; 什么是 outline&#xff1f;outline 是瀏覽器在某些元素&#xff08;例如輸入框 <input>、按鈕 <button>、可編輯元素如 <d…

Java 正則表達式白皮書:語法詳解、工程實踐與常用表達式庫

一、什么是正則表達式&#xff1f;正則表達式&#xff08;Regular Expression&#xff09;是一種文本模式&#xff0c;用于描述、匹配、搜索或替換符合某種規則的字符串。其在日志提取、表單校驗、配置清洗、數據爬取等場景中被廣泛使用。Java 提供了完整的正則表達式支持&…

火山引擎Data Agent全面上線售賣!以企業級數據智能體,重構數據應用范式

資料來源&#xff1a;火山引擎-開發者社區 在火山引擎2025春季FORCE原動力大會現場&#xff0c;火山引擎數智平臺解決方案總經理蕭然宣布&#xff0c; 企業級數據智能體Data Agent即日起正式上線售賣 。該產品旨在通過DataAI的深度融合&#xff0c;助力企業實現數據價值的挖掘與…

uniapp AndroidiOS 定位權限檢查

定位權限檢查 // 檢查定位權限狀態 export const checkPermission () > {const platform uni.getSystemInfoSync().platform;console.log(platform, platform)// #ifdef APP-PLUSif (platform android) {// Androidreturn checkAndroidPermission();} else if (platform …