背景:希望通过点击菜单对应的选项切换子窗口的焦点
属于是同一个信号与槽函数触发不同的结果
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));