Qt: получить доступ к виджету из основной функции и реализовать кнопку выхода

Я хочу реализовать кнопку выхода в моем приложении, которое имеет следующую настройку:
У меня есть основная функция, которая выглядит так:

QApplication a(argc, argv);
MainWindow w;

w.show();

return a.exec();

У меня также есть функция mainWindow, сгенерированная IDE QT Creator.
Я проектирую графический интерфейс с помощью Qt Designer, и когда я хочу, чтобы кнопка что-то делала при нажатии, я использую такую ​​функцию:

void on_selection_clicked();

Я надеюсь, что настройка теперь достаточно описана.
Теперь к моей проблеме: я хочу реализовать кнопку, которая, при нажатии, закрывает окно и приложение. Сначала я попытался реализовать это в такой функции:

void on_exit_clicked();

Но я не знаю, что здесь.
Тогда я услышал о приближении через QObject::connect, но у меня есть два вопроса:
1.) Где я должен положить это? В основной функции?
2.) я могу получить доступ к объекту просто через имя объекта, указанное в QT Designer?

0

Решение

  1. нет, вы должны подключить его в конструкторе MainWindow

    connect(ui->exit,SIGNAL(clicked()),QCoreApplication::instance(), SLOT(exit()));
    

    QCoreApplication::instance()->exit() выйдет из приложения

  2. да через поле пользовательского интерфейса в MainWindow см. код выше

1

Другие решения

Я не знаю, какую версию Qt вы используете, поэтому я полагаю, что Qt 5.0 (механизм сигналов / слотов был обновлен).

  • QWidget имеет слот QWidget :: close ().

  • QPushButton предоставляет сигнал QPushButton :: clicked (bool checked = false)

Таким образом, вы можете подключить их в конструкторе вашего главного окна:

QObject::connect(your_button, &QPushButton::clicked, this, &QWidget::close());

Также я предлагаю изучить файлы, сгенерированные из файлов * .ui — чтобы у вас было более глубокое понимание того, что происходит.

1

По вопросам рекламы [email protected]