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));
相关推荐
程序员zgh1 天前
CMake 项目构建工具介绍
c语言·开发语言·c++·编辑器
自在极意功。1 天前
深入解析JDBC:Java数据库操作的基础
java·开发语言·数据库·jdbc
czhc11400756631 天前
c#w 1214
开发语言·c#
jimy11 天前
bash “ if <command>; then”语句,<command>返回0,then后面语句才执行
开发语言·bash
八年。。1 天前
simulink与python联合仿真(一)安装MATLAB引擎
开发语言·python
爱吃KFC的大肥羊1 天前
Redis 基础完全指南:从全局命令到五大数据结构
java·开发语言·数据库·c++·redis·后端
Kiri霧1 天前
Go 结构体
java·开发语言·golang
沐知全栈开发1 天前
《jQuery 密码验证》
开发语言
-大头.1 天前
Java泛型实战:类型安全与高效开发
java·开发语言·安全
charlie1145141911 天前
现代C++工程实践:简单的IniParser4——实现ini_parser
开发语言·c++·笔记·学习·工程