QT:信号映射器

背景:希望通过点击菜单对应的选项切换子窗口的焦点

属于是同一个信号与槽函数触发不同的结果

1.创建信号映射器

cpp 复制代码
QSignalMapper *m_WndMapper;//信号映射器

2.信号映射器和槽函数连接初始化

将第3步的自定义槽函数与mapped信号建立连接

cpp 复制代码
m_WndMapper = new QSignalMapper(this);
connect(m_WndMapper,SIGNAL(mapped(QWidget*)),
        this,SLOT(setActivateSubWindow(QWidget*)));

3.创建子窗口切换的槽函数

cpp 复制代码
void setActivateSubWindow(QWidget*);

实现槽函数:使用qobject_cast对窗体进行转换,转成mdiarea的子窗体

cpp 复制代码
void MainWindow::setActivateSubWindow(QWidget *wnd)
{
    if(!wnd)
    return;
    ui->mdiArea->setActiveSubWindow(qobject_cast<QMdiSubWindow*>(wnd));

}

4.添加子窗口函数中编写子窗口与菜单选项的map绑定的代码

cpp 复制代码
connect(menuitem_act,SIGNAL(triggered(bool)),
                m_WndMapper,SLOT(map()));

m_WndMapper->setMapping(menuitem_act,wnds.at(i));
相关推荐
程序 代码狂人16 分钟前
CentOS7初始化配置操作
linux·运维·开发语言·php
从此不归路18 分钟前
Qt5 进阶【13】桌面 Qt 项目架构设计:从 MVC/MVVM 到模块划分
开发语言·c++·qt·架构·mvc
zhangx1234_19 分钟前
C语言 数据在内存中的存储
c语言·开发语言
星空露珠20 分钟前
速算24点检测生成核心lua
开发语言·数据库·算法·游戏·lua
老蒋每日coding21 分钟前
Python3基础练习题详解,从入门到熟练的 50 个实例(一)
开发语言·python
历程里程碑24 分钟前
Linux15 进程二
linux·运维·服务器·开发语言·数据结构·c++·笔记
lly20240626 分钟前
网站主机提供商:如何选择最适合您的服务
开发语言
HAPPY酷27 分钟前
构建即自由:一份为创造者设计的 Windows C++ 自动化构建指南
开发语言·c++·ide·windows·python·策略模式·visual studio
工一木子27 分钟前
Java 的前世今生:从 Oak 到现代企业级语言
java·开发语言
啟明起鸣30 分钟前
【C++20新特性】概念约束特性与 “模板线程池”,概念约束是为了 “把握未知对象”
开发语言·c++·c++20·模板线程池