Название: [решено] трабл с главным окном Отправлено: bovka от Января 25, 2010, 12:09 доброго времени суток!
для меня QT - новьё, и вот я решил подробнее с ним познакмиться. предоставляю вам код моего недоделыша, так как я не могу понять в чем проблема?? мне нужно, что в главном окне появлялись виджеты, которые я создаю, но у меня при компиляции появляется главное окно и еще отдельно виджеты, которые я создаю. Код: QApplication a(argc, argv); Название: Re: трабл с главным окном Отправлено: DS_tm от Января 25, 2010, 12:14 Во первых Вам не стоило использовать для этих целей QMainWindow, лучше наследовать от QDialog свой класс формы.
А во вторых не стоит вызывать у дочерних виджитов функцию show(). Родительский класс сам отобразит своих потомков, при правильном создании, конечно. Название: Re: трабл с главным окном Отправлено: Авварон от Января 25, 2010, 12:14 - edit1->show();
- edit2->show(); - edit3->show(); - edit4->show(); w.setLayout(lay3); //после добавлени виджетов Название: Re: трабл с главным окном Отправлено: bovka от Января 25, 2010, 12:17 - edit1->show(); неа, та же беда....- edit2->show(); - edit3->show(); - edit4->show(); w.setLayout(lay3); //после добавлени виджетов Название: Re: трабл с главным окном Отправлено: BRE от Января 25, 2010, 12:19 Для всех дочерних виджетов нужно указывать parent, это то окно, которое будет ими владеть и на котором они будут располагаться.
Код Посмотри примеры, которые идут с Qt - там все это есть. Название: Re: трабл с главным окном Отправлено: Авварон от Января 25, 2010, 12:27 установка лайаута вызывает репарент
также надо поменять добавление виджетов и добавление лайаутов в 3й лайаут Название: Re: трабл с главным окном Отправлено: DS_tm от Января 25, 2010, 12:40 С репарентом полностью согласен, ну а вообще, про последовательность использованийя операций setLayout и setWidget, разве есть разница, виджет перещитывает всю геометрию при вызове show(). На мой взгляд проблема всеже в лишних show и использовании QMainWindow, а точнее в том, что там надо использовать не лайот, а setCentralWidget. Добавте еще один виджет, разместите на него все лайоты и установите его на MainWindow с помощью функиции setCentralWidget.
Название: Re: трабл с главным окном Отправлено: BRE от Января 25, 2010, 13:22 Давайте не будем так категоричны. :)
Мы обсуждаем конкретный пример с QMainWindow, давайте его немного упростим: Код
Цитировать w = QMainWindow(0x7fff2ad335e0) Parent edit = QObject(0x0) QWidget::setLayout: Attempting to set QLayout "" on QMainWindow "", which already has a layout Parent edit = QObject(0x0) Если добавить parent при создании QLineEdit, то он будет добавлен на QMainWindow, хотя с layout будут проблемы. А вот если отказаться от QMainWindow в пользу QWidget, то действительно произойдет репарент и все будет нормально. Хотя правильно, как сказал DS_tm, использование внутренний виджет+setCentralWidget, т.к. QMainWindow использует свой layout для размещения своих внутренних элементов. Название: Re: трабл с главным окном Отправлено: bovka от Января 26, 2010, 05:28 Давайте не будем так категоричны. :) Мы обсуждаем конкретный пример с QMainWindow, давайте его немного упростим: Код
Цитировать w = QMainWindow(0x7fff2ad335e0) Parent edit = QObject(0x0) QWidget::setLayout: Attempting to set QLayout "" on QMainWindow "", which already has a layout Parent edit = QObject(0x0) Если добавить parent при создании QLineEdit, то он будет добавлен на QMainWindow, хотя с layout будут проблемы. А вот если отказаться от QMainWindow в пользу QWidget, то действительно произойдет репарент и все будет нормально. Хотя правильно, как сказал DS_tm, использование внутренний виджет+setCentralWidget, т.к. QMainWindow использует свой layout для размещения своих внутренних элементов. спасибо большое!!!=)))) очень рад тому, что люди не воротят голову от новичков, а пытаются помочь!))) |