2

Почему если дочернему виджету ставить родителя, то дочерний "вставляется" в родительский? Как этого избежать?

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

backuot
  • 103

2 Answers2

1

Почему если дочернему виджету ставить родителя, то дочерний "вставляется" в родительский?

Правило из документации - A widget is clipped by its parent and by the widgets in front of it. Вероятно Вам нужно переосмыслить то, что Вы хотите сделать. Попробуйте обратиться к паттернам программирования, например Observer [GoF].

Update

У конструктора виджета также есть второй параметр Qt::WindowFlags, который принимает такие значения как Qt::Dialog или Qt::Window (ref).

  • я просто хочу сделать всплывающий диалог, но при указании родителя он почему то вставляется в него. – backuot May 25 '17 at 10:00
  • У конструктора виджета есть второй параметр Qt::WindowFlags, который принимает такие значения как Qt::Dialog или Qt::Window (ref). Веротяно это то, что Вам надо. – Виктор Боровлёв May 25 '17 at 10:08
  • У меня диалог был создан на основе QWindget, в этом случае и надо указывать флаг. Если делать на основе QDialog, то все работает нормально. – backuot May 25 '17 at 10:42
  • @LFDS всплывающий диалог надо наследовать от QDialog, а не от QWidget, тогда будет всплывать отдельным окном, а не помещаться в виджет-родитель – Bearded Beaver May 25 '17 at 14:05
1

Попробуйте сделать сделать так:

myDialog->setParent(this); //ну или кто там будет родителем
myDialog->setWindowFlags(Qt::Dialog);

Ну и соответственно при создании myDialog родителя не указывайте.