Qt插槽连接无法在子对话框下工作

时间:2012-03-28 13:59:32

标签: c++ qt qt4

我有一个像程序这样的文本编辑器,它是一个QMainWindow继承的类。在那里,当我点击查找时,连接

connect(actionFind,SIGNAL(triggered()),this,SLOT(actionFindTriggered()));

激活。而且该功能的定义是

void    MainWindow::actionFindTriggered() {
    new Find(this);
}

我的Find课程是

class Find : public QDialog, public Ui::Dialog
{
public:
    Find(QWidget *parent=0);

private:
    Ui::Dialog *ui;

public slots:
    void    buttonFindTriggered();
};

定义是

Find::Find(QWidget *parent)
    : QDialog(parent)
{
    ui = new Ui::Dialog;
    ui->setupUi(this);
    show();
    this->

    connect(ui->buttonClose, SIGNAL(clicked()), this, SLOT(close()));
    connect(ui->buttonFind, SIGNAL(clicked()), this, SLOT(buttonFindTrigddgered()));
}

void    Find::buttonFindTriggered() {
    qDebug() << "FIND ACTIVATED";
}

有什么问题

当我从主窗口点击查找时,查找窗口成功运行但无法进行连接。我在控制台上获得了以下消息,

Object::connect: No such slot QDialog::buttonFindTriggered() // Edited
Object::connect:  (sender name:   'buttonFind')
Object::connect:  (receiver name: 'Dialog')
由于拼写错误,

已编辑 ...!

2 个答案:

答案 0 :(得分:6)

您忘记了Q_OBJECT宏。

另外 - 考虑使用此表示法来获取插槽自动连接(setupUI会自动连接这些插槽)。

void on_buttonFind_clicked();
void on_buttonClose_clicked();

答案 1 :(得分:1)

如错误消息所示,它找不到插槽:

buttonFindTrigddgered()

因为它应该是:

buttonFindTriggered()