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