Qt菜单 QMenu QAction连接信号槽函数

Menu菜单 或 其中的QAction 连接槽函数

以下两句connect 任一均可实现:

QStringList strList;
for(int i = 0; i< strList.size(); ++i)
{
    QString tmp = strList.at(i);
    QAction *act = new QAction(tmp, m_menu);
    act->setCheckable(true);
    act->setChecked(false);
    m_menu->addAction(act);
    connect(act, SIGNAL(triggered()), this, SLOT(checkedAction()));
}
//connect(m_menu, SIGNAL(triggered(QAction*)), this, SLOT(checkedLibAction(QAction*)));


QSignalMapper 

      signalMapper = new QSignalMapper(this);

      for (int i = 0; i < texts.size(); ++i) {
          QPushButton *button = new QPushButton(texts[i]);
          connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
          signalMapper->setMapping(button, texts[i]);
      }
      connect(signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(clicked(QString)));


QSignalMapper 官方介绍:

The QSignalMapper class bundles signals from identifiable senders.

    void setMapping(QObject *sender, int id);
    void setMapping(QObject *sender, const QString &text);
    void setMapping(QObject *sender, QWidget *widget);
    void setMapping(QObject *sender, QObject *object);
    void removeMappings(QObject *sender);

Q_SIGNALS:
    void mapped(int);
    void mapped(const QString &);
    void mapped(QWidget *);
    void mapped(QObject *);

这四种捆绑方式,使用超级灵活。同一个sender在一个map中可以被捆绑多次;

int 型的以及 QString、QWidget等 的Map捆绑互相独立,互不影响。

以及一个 signalMap 的 mapped信号最多可以连接到4个不同类型的槽函数,这四个信号槽相互独立。



Qt中,右键菜单可以通过QMenu和QAction来实现。要让子菜单能够响应函数,可以使用QAction的triggered信号函数进行连接。 首先,在Qt Designer中创建一个QMenu,并添加一些QAction作为子菜单。然后,通过右键菜单策略(例如在QWidget上设置setContextMenuPolicy为Qt::CustomContextMenu)将菜单与QWidget相关联。 接下来,在QWidget的构造函数中,创建QMenu和QAction,并将它们添加到QMenu中。然后,使用connect()函数将QAction的triggered信号函数进行连接函数的实现可以根据需要进行自定义。 以下是示例代码: ```cpp // 创建菜单和子菜单 QMenu* menu = new QMenu(this); QAction* action1 = new QAction("子菜单项1", this); QAction* action2 = new QAction("子菜单项2", this); // 将子菜单添加到菜单menu->addAction(action1); menu->addAction(action2); // 设置右键菜单策略 this->setContextMenuPolicy(Qt::CustomContextMenu); // 创建右键菜单动作 QAction* menuAction = new QAction("右键菜单", this); connect(menuAction, &QAction::triggered, this, &MyWidget::showContextMenu); // 将菜单动作添加到QWidget中 this->addAction(menuAction); // 显示函数 void MyWidget::showContextMenu() { QPoint cursorPos = QCursor::pos(); menu->exec(cursorPos); } // QAction的triggered信号连接函数 void MyWidget::onActionTriggered() { // 处理子菜单项的点击事件 } ``` 在这个示例中,当用户右键单击QWidget时,会显示一个右键菜单。当用户单击子菜单项时,将会调用onActionTriggered()函数进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值