Russian Qt Forum
Ноябрь 24, 2024, 03:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMessageBox поверх QDialog, поверх QDialog  (Прочитано 5248 раз)
Dexel
Гость
« : Сентябрь 11, 2014, 02:09 »

Здравствуйте.
Основное окно созаётся как QDialog (1).
Поверх него ещё один QDialog (2).
Поверх него QMessageBox (3).

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

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

Записан
Figaro
Гость
« Ответ #1 : Сентябрь 11, 2014, 04:41 »

Минимально компилируемый проект в студию... Или к Ванге...
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Сентябрь 11, 2014, 11:07 »

при создании QMessageBox(3) в конструктор передавать парента QDialog(2)

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

поидее так
Записан
Dexel
Гость
« Ответ #3 : Сентябрь 11, 2014, 12:08 »

Минимально компилируемый проект в студию... Или к Ванге...
Figaro, положил проект.

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

Сообщений: 1177


Просмотр профиля
« Ответ #4 : Сентябрь 11, 2014, 12:19 »

в Dialog2 вешайся на кнопку OK, и там принимай решение - accept или reject
Записан
OKTA
Гость
« Ответ #5 : Сентябрь 11, 2014, 12:30 »

У тебя ж прописаны сигналы accepted и rejected в Dialog2 (через дизайнер). Вот он и закрывается по приходу этих сигналов. Убираешь их и все ок.
Записан
Dexel
Гость
« Ответ #6 : Сентябрь 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();
}
}

Спасибо всем!
Записан
OKTA
Гость
« Ответ #7 : Сентябрь 11, 2014, 14:58 »

Ставь [РЕШЕНО] в заголовке темы, если проблема решена.
Записан
Dexel
Гость
« Ответ #8 : Октябрь 25, 2014, 15:12 »

Ставь [РЕШЕНО] в заголовке темы, если проблема решена.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Октябрь 25, 2014, 15:28 »

Ставь [РЕШЕНО] в заголовке темы, если проблема решена.


Тыкаете на "Изменить" и меняете заголовок.
Для таких проверок у QString есть метод isEmpty
Код:
if(ui->lineEdit->text() == "")
Лучше так делать:
Код:
if(ui->lineEdit->text().isEmpty())
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.