Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Dexel от Сентябрь 11, 2014, 02:09



Название: QMessageBox поверх QDialog, поверх QDialog
Отправлено: Dexel от Сентябрь 11, 2014, 02:09
Здравствуйте.
Основное окно созаётся как QDialog (1).
Поверх него ещё один QDialog (2).
Поверх него QMessageBox (3).

При открытии 3, закрывается 2.
Оба открываются методом exec().

Как сделать чтоб не закрывался 2 диалог при открытии MessageBox 3?



Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: Figaro от Сентябрь 11, 2014, 04:41
Минимально компилируемый проект в студию... Или к Ванге...


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: Fregloin от Сентябрь 11, 2014, 11:07
при создании QMessageBox(3) в конструктор передавать парента QDialog(2)

QDialog d2;
d2.exex();
QMessageBox m3(&d2);
m3.exex();

поидее так


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: Dexel от Сентябрь 11, 2014, 12:08
Минимально компилируемый проект в студию... Или к Ванге...
Figaro, положил проект.

Fregloin, парентом для MessageBox является текущий диалог(2). Указал QMessagebox msgBox(this), - то ж самое.


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: qate от Сентябрь 11, 2014, 12:19
в Dialog2 вешайся на кнопку OK, и там принимай решение - accept или reject


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: OKTA от Сентябрь 11, 2014, 12:30
У тебя ж прописаны сигналы accepted и rejected в Dialog2 (через дизайнер). Вот он и закрывается по приходу этих сигналов. Убираешь их и все ок.


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: Dexel от Сентябрь 11, 2014, 14:48
Аййй, всё, понял :)

Может кому пригодится. Изменённая реализация класса qdialog2.cpp
Код:
Dialog2::Dialog2(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog2)
{
ui->setupUi(this);

connect(ui->pushButton, SIGNAL(clicked()),
this, SLOT(acceptDialog2()));
}

void Dialog2::acceptDialog2()
{
QMessageBox msgBox;
if(ui->lineEdit->text() == "")
{
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Поле не может быть пустым.");
msgBox.exec();
}
else
{
msgBox.setIcon(QMessageBox::Information);
// Запись в БД
msgBox.setText("Данные успешно записаны.");
msgBox.exec();
this->close();
}
}

Спасибо всем!


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: OKTA от Сентябрь 11, 2014, 14:58
Ставь [РЕШЕНО] в заголовке темы, если проблема решена.


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: Dexel от Октябрь 25, 2014, 15:12
Ставь [РЕШЕНО] в заголовке темы, если проблема решена.


Название: Re: QMessageBox поверх QDialog, поверх QDialog
Отправлено: gil9red от Октябрь 25, 2014, 15:28
Ставь [РЕШЕНО] в заголовке темы, если проблема решена.


Тыкаете на "Изменить" и меняете заголовок.
Для таких проверок у QString есть метод isEmpty (http://qt-project.org/doc/qt-4.8/qstring.html#isEmpty)
Код:
if(ui->lineEdit->text() == "")
Лучше так делать:
Код:
if(ui->lineEdit->text().isEmpty())