Пытаюсь в конструкторе 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())); //здесь ошибка
}
Я думаю вопрос не в том как вызвать слот 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 передается указатель объекта который будет генерировать сигнал, второй аргумент, адрес сигнала, третий аргумент это адрес объекта который будет принимать сигнал, четвертый - адрес слота.
В вашем коде вы пытаетесь сделать соединение к объекту которого нет.
A *a; // Здесь есть указатель, но он не указывает на какой-либо объект.
A *a = new A(); // а этот указатель уже можно использовать
Продвижение своими сайтами как стратегия роста и независимости