Пытаюсь в конструкторе 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(); // а этот указатель уже можно использовать
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Изначально есть бинарный файлМне полностью известна его структура
Найдите количество правильных несократимых дробей, не превосходящих X, знаменатель которых не превосходит NОграничения: 2 <= N <= 100000
В Delphi для чтения и записи свойств можно использовать разные функцииЭто для примера