Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 26.2.2011, 7:05 |
А в этом ui_file.h - видно это class Ui_OxOutput приведи код этого файла.namespace UI ... class OxOutput: public Ui_OxOutput {}; |
|
horror812 | Дата 25.2.2011, 20:36 |
abc Litkevich Yuriy Спасибо. Не много уточню, что бы разобраться На примере моего класса class OxOutput : public QDockWidget {...} А в этом ui_file.h - видно это class Ui_OxOutput namespace UI ... class OxOutput: public Ui_OxOutput {}; Вот так если, я создаю мой new OxOutput (parent) в этом случае - удалиться Как вы сказали родитель указан явно. А в OxOutput этот экземпляр (UI::OxOutput *ui) и так удаляется через delete ui в деструкторе А, что касается ДокВиджетов, если он отцеплен от формы он имеет родителя? при закрытие он, вроде , просто скрывается, а удалять его нужно при закрытие формы? Ну и вообще стоит ли "доверять" этому авто-удалению?) или лучше, если форма не нужна ставить родитель в Ноль и удалять? |
|
Litkevich Yuriy | Дата 25.2.2011, 19:56 |
добавляю виджет через оператор new нет, new здесь ничего не решает. Решает только иерархия объектов, если наследнику QObject устанавливается родитель, явно или не явно, то родитель удалит дитя, когда сам будет удалятся.правильно я понимаю, что при удаление родителя он его удалит? Примеры: Виджетам o1 и o2 родитель установлен явно.А виджету w не явно, т.к. виджет помещён в компоновщик, а компоновщик установлен для виджета parent, тогда компоновщик сам устанавливает своим вложенным виджетам родителя, на который помещён сам компоновщик. На основе этого (и внимательного изучения файлов ui_file.h) следует: объект ui - не является наследником QObject и к нему не применим механизм автоудаления. Т.е. объект ui ты должен удалять руками в деструкторе класса, в котором ты создал этот объект. |
|
abc | Дата 25.2.2011, 19:53 |
удалит приведу пример, когда без нью неуютно. Допустим, у твоей программы есть "хелп" - нажал по кнопочке, окошко хелпа появляется, почитали хелп, забыли о нём. Допустим, что хелп сделан через QLabel. И вот у тебя слот кнопки: on_pushButton_clicked() { QLabel label("помощь"); label.show(); } При выходе из слота label удалится, и ты не увидишь хелпа. А если через нью, то label повисит, пока его сам не закроешь. Можно глобально переменную label выделить и держать её всё работу проги, а можно вот через нью локально. Ну, вот такая, допустим, ситуация, думаю, она наглядна. Вроде бы не вру... Передаю слово Юре) |
|
horror812 | Дата 25.2.2011, 19:23 |
Litkevich Yuriy Спасибо за помощь В общем я разобрался, что-то было не так с файлом uic.exe (там где QT) Я его заменил. И заработало) Еще вопрос можно задать. Если я добавляю виджет через оператор new правильно я понимаю, что при удаление родителя он его удалит? или мне нужно самому удалять в деструкторе? или может стоит все нужное бросать на стек, а не через нью? Спасибо. |
|
horror812 | Дата 25.2.2011, 18:08 |
В объявлении класса OxMainWindow, указатель ui объявлен так ?да, так. я код то и не писал. Сделал все визардами, создал проект, создал свой виджет и все, что сделал подключил мой виджет и объявил его в классе остальной код был сгенерирован автоматом. А есть ли в примерах, примеры (сорри за тавтологию) где используется редактор форм? Нашел только такие, где редактор для основной формы, а все остальные кодом. я бы в них поглядел) Кстати говоря, если убрать мой виджет *.уи и поменять его на такой же но созданный кодом (как в примерах - кодом) все работает. Но хочется QT Дизайнер использовать |
|
Litkevich Yuriy | Дата 25.2.2011, 17:42 |
В объявлении класса OxMainWindow, указатель ui объявлен так ? |
|
horror812 | Дата 25.2.2011, 14:22 |
Привет Главная форма OxMainWindow.h
OxMainWindow.cpp Можно и ничего не менять и не создавать мой output все как при генерации
Мой виджет oxoutput.h
Мой виджет oxoutput.cpp
Спасибо за помощь) |
|
Litkevich Yuriy | Дата 25.2.2011, 7:00 |
Понял его так от берет мой файл и дописывает в него все эти компоненты во время компиляции. приведи код здесь, чтобы сократить место, приводи объявления классов (заголовочники) и начало cpp-файлов (вместе с конструкторами)Но его просмотр мне не помог) По оформлению кода см. тему Справка по кнопкам и тэгам форума |
|
horror812 | Дата 24.2.2011, 22:20 |
-В конструкторе после ui->setupUI(this) тебе нужно заглянуть в обработанный ui-файл, тогда поймёшь, что ты делаешь не так.Если твой ui-файл называется myoutput.ui, то открой файл ui_myoutput.h (поищи в подкаталогх проекта). внимательно его изучи Спасибо за ответ. не, я говорю можно даже не создавать экземпляр моего класса, а просто где-нибудь написать MyOutput ... я так понимаю что файл ui_.. это просто описание формы кодом т.е. условно говоря, я могу не в редакторе создавать, а написать все руками. Понял его так от берет мой файл и дописывает в него все эти компоненты во время компиляции. Но его просмотр мне не помог) Я все же склоняюсь что я не так подключаю файл include '...myoutput' Будь добр, посмотри пожалуйста чтобы получит ошибку нужно от комментировать 2 строчки помеченные таким комментарием //### в файле oxmainwindow.h (4Кб) ifolder или slil.ru |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 19:52 |