c++ - 触发时无法将 QAction 链接到函数 (Qt 5)

标签 c++ qt5 qaction

我正在尝试向系统托盘添加上下文菜单(可通过单击系统托盘图标激活)我已成功添加菜单和带有文本“退出”的操作,但我不知道如何链接这些操作将“触发”功能更改为另一个功能/更改触发功能或其他任何可以工作的功能。我只是想在单击操作时激活某些特定行为。当我单击此操作按钮时,它不会执行任何操作。我尝试使用此构造函数将其链接到成员函数: QAction *QMenu::addAction(const QIcon &icon, const QString &text, const QObject *receiver, PointerToMemberFunction method, const QKeySequence &shortcut = ...) 这是我的代码中最重要的部分:

     MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        mSystemTrayIcon = new QSystemTrayIcon(this);
        mSystemTrayIcon->setIcon(QIcon(":/iris_logo.png"));
        mSystemTrayIcon->setVisible(true);

        systemTrayMenu = new QMenu("Context menu");
        systemTrayMenu->setToolTipsVisible(true);
 // I get the error: no matching member function for call to 'addAction'
        systemTrayMenu->addAction("Open", this, on_actionQuit_triggered())); 

// I dont get an error, however this only creates a menu button, not its corresponding function that must be called.
        systemTrayMenu->addAction("Exit"); 
        mSystemTrayIcon->setContextMenu(systemTrayMenu);
    }

最佳答案

addAction 返回一个指向 QAction 对象的指针,获取该指针并使用 connect 来建立 triggered 之间的连接> 信号和 on_actionQuit_triggered 槽:

QAction* openAction = systemTrayMenu->addAction("Open"); 
connect (openAction, SIGNAL(triggered()) , this, SLOT(on_actionQuit_triggered()));

关于c++ - 触发时无法将 QAction 链接到函数 (Qt 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52913341/

相关文章:

C++静态结构体成员变量效率

c++ - 修改无窗口 QLabel 的 Alpha channel 透明度

qt - 有没有办法在禁用的 QWidget 上显示工具提示

c++ - 如何更改工具栏中 QAction 的颜色?

c++ - 调用信号的函数堆栈内存和函数控制会发生什么

c++ - 将数组内容打印到序列号,给出意外的值

c++ - 在给定处理器缓存的情况下,Windows 中的页面写入跟踪有多可靠

c++ - 将信号从 QML 连接到 Qt : var to QList<QString>

c++ - 在项目的另一个类中使用 QTimer 及其超时事件

c++ - 如何获得禁用的 QAction 元素的触发信号?