Qt5—qobject_cast<QAction *>(sender())应用 [2013-11-19整理]

来源:互联网 发布:现货农产品分析软件 编辑:程序博客网 时间:2024/06/11 06:01

可以利用qobject_cast<QAction *>(sender())获得信号发送者的对象,实现差异化处理


头文件

class MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow(QWidget *parent = 0);    ~MainWindow();private slots:    void viewChanged();private:    void createActions();    void initMenus();    void initTools();    QAction *dataView;    QAction *pixView;    QAction *configView;};

关键代码

voidMainWindow::createActions() {    dataView = new QAction(tr("数据视图"), this);    connect(dataView, SIGNAL(triggered()), this, SLOT(viewChanged()));    pixView = new QAction(tr("曲线视图"), this);    connect(pixView, SIGNAL(triggered()), this, SLOT(viewChanged()));    configView = new QAction(tr("配置视图"), this);    connect(configView, SIGNAL(triggered()), this, SLOT(viewChanged()));}voidMainWindow::initMenus() {    QMenu *menus = menuBar()->addMenu(tr("menus"));    menus->addAction(dataView);    menus->addSeparator();    menus->addAction(pixView);    menus->addSeparator();    menus->addAction(configView);}voidMainWindow::initTools() {    QToolBar *tools = addToolBar(tr("tools"));    tools->addAction(dataView);    tools->addSeparator();    tools->addAction(pixView);    tools->addSeparator();    tools->addAction(configView);}voidMainWindow::viewChanged() {    QAction *act = qobject_cast<QAction *>(sender());    if (act == dataView) {        qDebug() << "dataView";    }else if (act == pixView) {        qDebug() << "pixView";    } else {        qDebug() << "configView";    }}

应用,可以巧妙利用该特性实现主窗口的堆栈式渲染效果


原创粉丝点击