Как обратиться к другому слоту Qt

86
28 мая 2021, 16:30

Пытаюсь в конструкторе B вызвать слот A::toExit(). Как исправить ошибку?

class A:: public QMainWindow
{
    Q_OBJECT
    public:
    explicit A(QWidget *parent = 0);
    A *a;
    public slots:
    void toExit();
}
class B:: public QWinget
{
    Q_OBJECT
    public:
    explicit B(QWidget *parent = nullptr);
    QPushButton *but;   
    B *b;
    A *a;
    but = new QPushButton(tr("Кнопка"));
    connect(but, SIGNAL(clicked()), a, SLOT(toExit())); //здесь ошибка
}
Answer 1

Я думаю вопрос не в том как вызвать слот A::toExit, а как по нажатию кнопки, находящейся в виджете В вызывать необходимый слот находящийся в главном окне. Примерно так:

class A: public QMainWindow
{
    Q_OBJECT
    public:
        explicit A(QWidget *parent = 0)
    {
        // ...
        connect(widgetWithButton->but, &QPushButton::clicked, this, &A::toExit )
        //...
    }
    public slots:
        void toExit();
    B* widgetWithButton;
}
class B: public QWidget
{
    Q_OBJECT
    public:
    explicit B(QWidget *parent = nullptr);
    QPushButton* but;   
}

Первым аргументом в connect передается указатель объекта который будет генерировать сигнал, второй аргумент, адрес сигнала, третий аргумент это адрес объекта который будет принимать сигнал, четвертый - адрес слота.

Answer 2

В вашем коде вы пытаетесь сделать соединение к объекту которого нет.

A *a; // Здесь есть указатель, но он не указывает на какой-либо объект.
A *a = new A(); // а этот указатель уже можно использовать
READ ALSO
С помощью чего лучше создать графический вывод бинарного файла(C++, QT)?

С помощью чего лучше создать графический вывод бинарного файла(C++, QT)?

Изначально есть бинарный файлМне полностью известна его структура

185
Как избежать TLE?

Как избежать TLE?

Найдите количество правильных несократимых дробей, не превосходящих X, знаменатель которых не превосходит NОграничения: 2 <= N <= 100000

74
Как реализовать чтение и запись информации в классе разными способами?

Как реализовать чтение и запись информации в классе разными способами?

В Delphi для чтения и записи свойств можно использовать разные функцииЭто для примера

124