gpt4 book ai didi

c++ - 为什么这个插槽被调用两次?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:22 25 4
gpt4 key购买 nike

我的问题是,当我单击 QMenuBar 中的某个项目时,相应的槽会被调用两次。我正在使用 Qt 4.8.1。我既没有使用 Qt Designer 也没有使用“自动连接”功能。这是我的代码片段:

#include <iostream>
#include <QWidget>
#include <QMenuBar>

class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0) : QWidget(parent)
{
QMenuBar *menu = new QMenuBar(this);
menu->addAction("Click here");
menu->addAction("Or here");
connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(handleAction(QAction*)));
}

public slots:
void handleAction(QAction *action)
{
std::cout << "Triggered" << std::endl;
}

};

主要功能:

#include "main.h"
#include <QApplication>

int main(int argc, char **argv)
{
QApplication app(argc, argv);
MyWidget w;
w.show();

return app.exec();
}

如果你编译它(使用 MOC 文件),你会看到点击“Click here”将打印一次“Triggered”和两次“Or here”。我不明白为什么。

我做错了什么?

最佳答案

使用Qt::UniqueConnection解决:

connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(handleAction(QAction*)), Qt::UniqueConnection);

http://doc.qt.io/qt-4.8/qt.html#ConnectionType-enum

关于c++ - 为什么这个插槽被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com