QT:信号映射器

时间:2025-03-28 20:22:41

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

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

1.创建信号映射器

QSignalMapper *m_WndMapper;//信号映射器

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

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

m_WndMapper = new QSignalMapper(this);
connect(m_WndMapper,SIGNAL(mapped(QWidget*)),
        this,SLOT(setActivateSubWindow(QWidget*)));

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

void setActivateSubWindow(QWidget*);

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

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

}

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

connect(menuitem_act,SIGNAL(triggered(bool)),
                m_WndMapper,SLOT(map()));

m_WndMapper->setMapping(menuitem_act,wnds.at(i));