@igormitrakov
Начинающий разработчик

Слоты в Qt C++?

Здравствуйте.
Начал изучать С++ QT. В ходе изучения сигналов и слотов возникли трудности.
Подскажите пожалуйста что не так?

ошибка: no matching function for call to 'QObject::connect(QPushButton*&, const char*, myClass&, const char*)'
QObject::connect(myObj.entr_butt, SIGNAL(clicked(bool)), myObj, SLOT(mySlot()));


myclass.h:

#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
#include <QVBoxLayout>


class myClass : public QObject
{
    Q_OBJECT
public:
    QPushButton *close_butt = new QPushButton("Закрыть");
    QPushButton *entr_butt = new QPushButton("Ввод");
    QPushButton *clr_butt = new QPushButton("Очистить");
    QTextEdit *text_Edit = new QTextEdit;
    QVBoxLayout *lay = new QVBoxLayout();
    QWidget *window = new QWidget();
    void func()
    {
        lay->addWidget(text_Edit);
        lay->addWidget(entr_butt);
        lay->addWidget(clr_butt);
        lay->addWidget(close_butt);
        window->setLayout(lay);
        window->show();
    }

public slots:
    mySlot(){
        text_Edit->setText("Слот вызван");
    }

};


main.cpp:

#include <QApplication>
#include <myclass.h>
#include <QObject>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    myClass myObj;
    myObj.func();
    QObject::connect(myObj.entr_butt, SIGNAL(clicked(bool)), myObj, SLOT(mySlot()));
    QObject::connect(myObj.close_butt, SIGNAL(clicked(bool)), myObj.window;, SLOT(close());
    return a.exec();
}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Нужен & перед первым myObj.

В остальном я код комментировать не буду, т.к. много и долго.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Начиная с 5 версии с включенной поддержкой с++11 слоты не нужны совсем, так как в качестве слота стало возможным передавать ссылку на любую функцию класса и не только. Производительность будет выше + больше проверок на этапе компиляции на совместимость сигнала и слота
https://wiki.qt.io/New_Signal_Slot_Syntax/ru

При создании классов наследников от QObject лучше всегда передавать родителя, чтобы не было необходимости прописывать delete в деструкторе.
doc.qt.io/qt-5/objecttrees.html
doc.qt.io/qt-5/qobject.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы