首页 > 移动平台 > 详细

QSignalMapper类实现点击按钮跳转栈窗口

时间:2021-05-03 14:56:30      阅读:25      评论:0      收藏:0      [点我收藏+]

成品

技术分享图片

类结构

技术分享图片

 

 buttongroup.h

enum Page{MYFILE, SHARE,  TRANSFER};
class buttongroup : public QWidget
{
    Q_OBJECT

public:
    explicit buttongroup(QWidget *parent = nullptr);
    ~buttongroup();
    void init();
public slots:
    void slotButtonClick(QString);

signals:
    void gotomyfile();
    void gotoshared();
    void gototransfer();
private:
    Ui::buttongroup *ui;
    QSignalMapper *m_mapper;   //定义一个信号映射类
    QPushButton * m_curbtn;
    QMap<QString,QPushButton*> m_btns;
    QMap<Page,QString> m_pages;


};

buttongroup.cpp

在构造函数中添加代码

    m_curbtn=ui->btn_myfile;  
    m_mapper=new QSignalMapper;
    m_btns.insert(ui->btn_myfile->text(),ui->btn_myfile); //key->我的文件  value->某个按钮指针
    m_btns.insert(ui->btn_shared->text(),ui->btn_shared);
    m_btns.insert(ui->btn_transfer->text(),ui->btn_transfer);

    m_pages.insert(MYFILE,ui->btn_myfile->text());
    m_pages.insert(SHARE,ui->btn_shared->text());
    m_pages.insert(TRANSFER,ui->btn_transfer->text());

    auto it = m_btns.begin();
    for(;it!=m_btns.end();++it)  //依次从容器中取出元素,设置他们的映射关系  如 btn_myfile<--->我的文件
    {
        m_mapper->setMapping(it.value(),it.value()->text());
//点击按钮的信号交由mapper处理            connect(it.value(),SIGNAL(clicked(bool)),m_mapper,SLOT(map()));
    }
      //mapper发出信号,由自定义槽函数处理,这里的QString 与setMapping函数的第二个参数对应
     connect(m_mapper, SIGNAL(mapped(QString)), this, SLOT(slotButtonClick(QString)));

自定义槽函数

void buttongroup::slotButtonClick(QString text)
{
    QPushButton *btn=m_btns[text];
    if(btn==m_curbtn)
        return;
    m_curbtn=btn;
    //发信号
    if(text==ui->btn_myfile->text())
    {
        emit gotomyfile();
    }else if(text==ui->btn_shared->text())
    {
         emit gotoshared();
    }else if(text==ui->btn_transfer->text())
    {
        emit gototransfer();
    }
}

这些发送跳转的信号,由mainwindow类中的信号和槽处理。

    connect(ui->btn_group,&buttongroup::gotoshared,[=](){
        ui->stackedWidget->setCurrentWidget(ui->page_shared);
    });

 

QSignalMapper类实现点击按钮跳转栈窗口

原文:https://www.cnblogs.com/xiaoxiaolinux/p/14727375.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!