【发布时间】:2014-10-20 16:20:53
【问题描述】:
我正在连接一个信号/插槽,但每次触发该选项时都会多次调用该插槽(1、2、3...),这是我的类:
主窗口.h:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Dialog *dialog;
signals:
void s1(QString s);
private slots:
void on_actionTooo_triggered();
};
#endif // MAINWINDOW_H
主窗口.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionTooo_triggered()
{
dialog = new Dialog(this);
QString s = "hello";
qDebug() << "CONNECT: " << connect(this, SIGNAL(s1(QString)),
dialog, SLOT(s1(QString)), Qt::UniqueConnection);
emit s1(s);
dialog->show();
}
dialog.h:
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
public slots:
void s1(QString str);
private:
Ui::Dialog *ui;
};
dialog.cpp:
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::s1(QString str)
{
qDebug() << str << endl;
}
每次在主窗口中触发该选项时,我都会将信号(仅一次)连接到新对话框,但是当我运行时,例如两次,它会打印两个“hello”。如果我在连接信号之前输入disconnect(this, 0, 0, 0);,它就可以工作。
我觉得奇怪的是,即使对象被销毁,它仍然保持连接。它将连接绑定到之前创建的同一个对象。这是预期的行为吗?
【问题讨论】:
标签: c++ qt qt-creator