Как вести информацию в статусбар?

149
22 октября 2018, 06:50

У меня есть главное окно, нам нём кнопка, которая открывает новое модальное окно (кнопка Параметры).У этого модального окна есть кнопка, которая его закрывает (кнопка Сохранить). Хочется, чтобы при закрытии модального окна по нажатию этой кнопки в статусбаре отображалась надпись.

Мне не понятно назначение указателя ui при создании окна. Как ссылаться на этот указатель, но у главного окна?

ParametersWindow::ParametersWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ParametersWindow)
{
    ui->setupUi(this);
}

UPD: У MainWindow создал публичный метод:

void MainWindow::messageInStatusBarMainWindow(const QString &message) {
ui->statusBar->showMessage(message);

}

При нажатии на кнопку Сохранить в окне с параметрами он вызывается:

    void ParametersWindow::on_save_button_clicked()
{
    dynamic_cast<MainWindow *>(ParametersWindow::parent())->messageInStatusBarMainWindow("Настройки сохранены");
    ParametersWindow::close();
}

Однако приложение валится при нажатии на Сохранить.

Answer 1

Силами комментирующих было найдено практичное решение: В классе главного окна был создан публичный метод, выводящий сообщение в statusBar:

void MainWindow::messageInStatusBarMainWindow(QString message) {
    ui->statusBar->showMessage(message, 2000);

}

В методе, обрабатывающем нажатие кнопки Сохранить у модального окна этот метод вызывается, где в параметры и передаётся нужное сообщение:

    void ParametersWindow::on_save_button_clicked()
{
    dynamic_cast<MainWindow *>(parent())->messageInStatusBarMainWindow(tr("Настройки сохранены"));
    ParametersWindow::close();
}
Answer 2

Надо завести флаг в диалоге, показывающий, принят ли диалог, или отклонен, и геттер для этого флага.

В showEvent диалога устанавливаем флаг в false

При нажатии на кнопку "сохранить" устанавливаем флаг в true, теперь окружающие классы могут понять, что диалог принят

В главном окне после вызова exec диалога проверяем состояние флага через публичный геттер диалога и в зависимости от возвращенного значения записываем строку в статусбар.

READ ALSO
IO-функции в kernel-space

IO-функции в kernel-space

Env: macOS, пишу драйвер, компилятор - clang

150
Перемещение QGroupBox в пределах одной формы

Перемещение QGroupBox в пределах одной формы

Задача простая но не нашел адекватного решенияУ меня есть QTabWidget и на одной из вкладок будет набор QGroupBox'ов, которые пользователь должен иметь...

168
Как получить имя файла через аргумент в visual basic

Как получить имя файла через аргумент в visual basic

Как написать на VB программу которая будет выводить имя файла через аргумент? Если писать на c++, то будет выглядеть примерно так

219
Ненормальное потребление памяти

Ненормальное потребление памяти

Есть бот для ВКонтакте на c++, запущенный на Raspbian (aka Debian) linuxЕсть также две абсолютно одинаковых платы Raspberry Pi, на которых всё это хостится

220