Соединение Qt-слота не работает под дочерним диалогом - PullRequest
0 голосов
/ 28 марта 2012

У меня есть текстовый редактор, как программа, которая является 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 ]

6 голосов
/ 28 марта 2012

Вы забыли макрос Q_OBJECT.

Также - рассмотрите возможность использования этой нотации для автоматического подключения слотов (setupUI автоматически подключит эти слоты за вас).

void on_buttonFind_clicked();
void on_buttonClose_clicked();
1 голос
/ 28 марта 2012

Как говорится в сообщении об ошибке, он не может найти слот:

buttonFindTrigddgered()

, так как он должен быть:

buttonFindTriggered()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...