[QT信号映射]void QSignalMapper::setMapping(QObject *sender, QWidget *widget)

- 首先摘取QT帮助的说明
void QSignalMapper::setMapping(QObject *sender, QWidget *widget)
Adds a mapping so that when map() is signalled from the sender, the signal mapped(widget ) is emitted.
There may be at most one widget for each sender.
翻译:
添加映射,以便在从发送方发出map()信号时,发出信号映射(小部件)。
每个发送者最多只能使用一个小部件。

- 我自己的学习理解
我理解为这个方法,其实就是起到发送者和接收窗体绑定的功能.
因为我们使用自带的槽方法可能在某些情况下没有合适的默认参数,这个方法可以中转一下.我理解这个方法可以当需要传递的信号和槽来用.(当然应该是可以重载方法,初学还没涉及那么深入)
当然某老师只是说他可以实现同信号的不同槽方法,但是我想了一下这个貌似不用也能实现,初学可能还没完全理解和遇到.

- 重点:自己犯的错,花了好久时间o(╥﹏╥)o
简单来讲 上面的参数QWidget *widget 这个类型是要用QT自带的类型,我用了一个自己的类,怎么都找不到原因.
在这里插入代码片

void MainWindow::addChildWndActions()
{
	//	ChildWnd这个是我自己定义的类型,用来做子窗体功能
    ChildWnd* activeWnd=getActivateWnd();		
    if(activeWnd==0) return;
    ui->menu_W->clear();
    ui->menu_W->addAction(ui->closeAction);
    ui->menu_W->addAction(ui->closeAllAction);
    ui->menu_W->addSeparator();
    ui->menu_W->addAction(ui->titleAction);
    ui->menu_W->addAction(ui->cascadeAction);
    ui->menu_W->addSeparator();
    ui->menu_W->addAction(ui->nextAction);
    ui->menu_W->addAction(ui->previousAction);
    ui->menu_W->addSeparator();

    QList<QMdiSubWindow*> subWndList= ui->mdiArea->subWindowList();

    for (int i=0;i<subWndList.size();i++)
    {
        ChildWnd* childWnd=MCC(subWndList.at(i));
        QString item=QString("%1 %2").arg(i+1).arg(childWnd->getCurDocName());
        QAction* curAction=ui->menu_W->addAction(item);
        if(childWnd==activeWnd)
        {
            curAction->setCheckable(true);
            curAction->setChecked(true);
        }
        connect(curAction,SIGNAL(triggered(bool)),m_signalMapper,SLOT(map()));
        //	subWndList.at(i)这个返回的是QMdiSubWindow*(看名字就知道是系统类)
        //	但实际上我的ChildWnd 就是这个类转换而来的,如果用ChildWnd所对应的变量来代替的话
        //	结果是不能达到你需要的效果
        m_signalMapper->setMapping(curAction,subWndList.at(i));
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值