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));
相关推荐
辞旧 lekkk1 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
帅次2 小时前
Kotlin 与 Java 互操作:混合工程里的平台类型与 API 边界
java·开发语言·kotlin·suspend·nullable
dtq04243 小时前
C语言-结构体详解
c语言·开发语言·学习
梅雅达编程笔记3 小时前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
持力行3 小时前
C++与Java变量声明、定义及内存分配的核心区别
java·开发语言·c++
jinyishu_4 小时前
C++ 继承全解:从基础到高级特性
开发语言·c++
蜡台6 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
小喻同学i6 小时前
std::thread函数参数传递
开发语言·c++
Ulyanov8 小时前
Python实现6-DOF刚体仿真器(下)——环境扰动与控制闭环
开发语言·python·算法·系统仿真·雷达电子对抗·导引头
分布式存储与RustFS8 小时前
RustFS Beta.10 性能解读:PUT 全面反超 MinIO,Rust 重写对象存储成了?
开发语言·后端·rust