Russian Qt Forum

Qt => Вопросы новичков => Тема начата: koldun90 от Октябрь 17, 2018, 22:35



Название: прорисовка в mdi
Отправлено: koldun90 от Октябрь 17, 2018, 22:35
Здравствуйте. Есть вопрос по mdi приложению. Само приложение прикрепил. Смысл в том что когда я нажимаю на кнопку (button) появляется прогресс бар.Мне нужно сделать так чтобы в окне mdi прорисовывался прогресс бар(qwidget), но он почему-то не прорисовывается. В случае если я ставлю
Код
C++ (Qt)
merf2 *mer=new merf2(0)
То прогресс бар прорисовывается, но мне это не подходит тк этот прогресс бар получается гуляет по всему окну, а мне нужно чтобы он был в границе mdi


Название: Re: прорисовка в mdi
Отправлено: koldun90 от Октябрь 19, 2018, 21:02
merf2 наследник QWidget
если код
Код
C++ (Qt)
merf2 *mer=new merf2(0)
mer->show
 

то картина
(https://cdn1.savepice.ru/uploads/2018/10/19/02c037741597ca1da8b87f088c1a64b3-full.png) (https://savepice.ru)
при этом окно перемещается как за границы mdi так и за границы всего окна приложения

Код
C++ (Qt)
merf2 *mer=new merf2(this)
mer->show
 
то картина
(https://cdn1.savepice.ru/uploads/2018/10/19/8752bc29db52a4d18374bf5c32474e22-full.png) (http://perfetto-furniture.com)
то почему то виджет не прорисовывается когда я ему указываю наследника


Мне же нужно поведение чтобы все полностью прорисовывалось на не выходило за границы mdi


Название: Re: прорисовка в mdi
Отправлено: lit-uriy от Октябрь 22, 2018, 05:58
когда у виджета нет родителя, то виджет - окно верхнего уровня.
когда у виджета есть родитель, то виджет является частью родителя.

задачу толком не понял, может тебе диалог с прогрессбаром нужен?
тогда и используй диалог (например, готовый QProgressDialog), задавая ему в качестве родителя QMdiSubWindow


Название: Re: прорисовка в mdi
Отправлено: Igors от Октябрь 22, 2018, 08:43
то почему то виджет не прорисовывается когда я ему указываю наследника
Наверное под "прорисовывается" имеется ввиду "окно с рамкой и титлом".  Но тогда да, юзер может его двигать куда угодно - для этого титл и предназначен.

Мне же нужно поведение чтобы все полностью прорисовывалось на не выходило за границы mdi
Выходило-не выходило - дело десятое. Наверное Вы хотели чтобы блокировалось только данное mdi окно, но не остальные, и можно было переключаться между разными mdi. Если так, то на платформе Вындоуз такого (стандартного) окна не знаю. На других есть, но титлов они не имеют и двигаться не могут, это нормально/правильно.

Итого: не стоит упорствовать чтобы добиться отрисовки системного титла - по смыслу это все равно "не то". Вставьте прогресс в рамочку - и все дела. Хотя бы так
Код
C++ (Qt)
void Form::on_pushButton_clicked()
{
QFrame * frame = new QFrame(this);
frame->setFrameStyle(QFrame::Panel | QFrame::Plain);
frame->setGeometry(100, 100, 400, 70);
merf2 * mer = new merf2(frame);
      frame->show();
Ъ