![]() |
|
|
![]()
|
|
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Есть QMainWindow. На нем в Designer'e положены QPushButton & QLineEdit.
Так вот. В Form->Layout поставид "Layout to Grid" Запускаю приложение. Ничего не меняется. Кнопка висит на прямоугольнике 0,0,600,500 (последние две координаты - приблизительно). Помогает только setGeometry. Как это через Manager сделать и как правильно, с точки зрения оптимальности и рациональности? Пробовал создаю свою раскладку (в конструкторе QMainWidget, имплиментацию сам делаю):
Ругается, мол у укна уже есть раскладка... Глянул ман. Сказано, мол удалите старую, а вот как - не нашел ;( |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Во-первых, что значит точка после this!!!
Во-вторых, как ты ui-файл юзаешь? И в дизаёнере после лейоута ты должен увидеть - как всё будет выглядет В-третьих, удаление лейоута - тупо по ассистенту: delete myWidget->layout(). Деструктор сделает своё дело |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Точка... Как в примере написано было так и писал
А может потом сглючило. В Десигнере я ворму вижу так, как мне надо и в превью тоже. Вот деструктур такой попробую. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
||||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Я же вроде написал. В Qt Designer. Перетаскиваю на форму элементы и сохраняю.
|
|||
|
||||
| brom |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 24.7.2007 Где: Таганрог, Россия Репутация: нет Всего: нет |
ui файл перегоняешь в сишный код или икпользуешь "как есть" ? Покажи как ui подключаешь. Я это сделал так:
и он взял layuot тот который я формировал в Designer Это сообщение отредактировал(а) brom - 28.7.2007, 12:32 |
||||
|
|||||
| powerfox |
|
||||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 4 Всего: 97 |
Так надо делать для QDialog и его производных. Кстати, не должно быть ни "this->", ни "this." просто layout->************. Удалять не надо - извращение. Для MainWindow надо делать так:
В общем, для QMainWindow просто нужен какой-то контэйнер в качестве центрального виджета. Но для тех форм, что ты проектируешь сейчас вполне достаточно QDialog - там извращаться с созданием контейнера не надо. Это сообщение отредактировал(а) powerfox - 28.7.2007, 14:23 |
||||
|
|||||
| Mal Hack |
|
||||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Кажется мне, что косяк в месте работы...
Главный файл программы:
Заголовочный файл класса окна приложения. Я создаю свой класс (тут будут все слоты организованы), наследник от QMainWindow и наследник от Ui_mainWindow - класс, создаваемый qmake'ом из .ui файла.
Файл реализации (пока только конструктор):
Мне кажется, что я не до конца понимаю, как бы сказать, как правильно в Qt сделать соединение формы и программного кода. На всякий случай, приведу вывод консоли:
Это сообщение отредактировал(а) Mal Hack - 28.7.2007, 21:56 |
||||||||
|
|||||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Ну this-> допустимо (здесь в плюсах дело, а не в куте). Но обычно зачем (исключение, скажем, иногда в шаблонах)? Я так понимаю речь про то, что централ виджет он сам реализовывал.
То есть для смены лэйоута - надо удалять. Вопрос в том - зачем его менять здесь. Или вручную ставим, или в дизайнере... Mal Hack, как я понимаю приложение небольшое - может весь код выложишь? |
|||
|
||||
| Mal Hack |
|
||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Честное пионерское с this'ами разберусь... Стыдно :( Но плохо я пока знаю когда их можно НЕ писать... НЕ совсем понятна структура программ с Qt.
Если под "централ виджет" ты понимаешь главное окно приложения, то да.
В предыдущем посте полностью выложил код. |
||||||
|
|||||||
| powerfox |
|
||||||||||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 4 Всего: 97 |
Mal Hack:
1. В ImplMainWindow::ImplMainWindow(QMainWindow *parent) нужно
2. Замени код
На это Либо сначала удали существующий Layout и устанавливай свой (тебе выше написали, как).
Я сказал, что: Зачем так резко с выделением? Я ничего противоречащего этому не писал. Просто это извращение, и в данном случае это соовсем не требуется. Добавлено через 1 минуту и 26 секунд
Тут ничего стыдного нет. Они подчиняются правилам С++. Просто в некоторых местах код читабельнее с ними и следует тогда так и писать (придерживаться стиля, принятого в книге по Qt). Добавлено через 7 минут и 1 секунду
Исключение не только в шаблонах. this используется, когда функция должна выполнить действие именно над вызвавшим объектом (все действия с/над "статикой". Тут чистый С++, не будем вдаваться в рассуждения. Я выразился резкова-то по поводу this, но у нас не политика, где нужно следить за оттенком, подбирая нужный синоним. |
||||||||||
|
|||||||||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Ну, блин, надо было подчеркнуть в той же строке во втором предложение вторую часть Больше вообще ничего не нужно, если юзаем дизайнер.
Зачем (даже без дизайнера)? При добавлении в лэйоут парент виджетов поменяется. |
||||
|
|||||
| powerfox |
|
||||||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 4 Всего: 97 |
А если не бобавлять, то можно в конструкторе указать родителя:
Не пробовал, но вполне можно получить указатель на существующий и туда пихать все кнопки. А извращение потому, что в приложениях, где QMainWindow обычно используют как раз центральный виджет. А setLayout - в небольших формах (на базе QWidget). |
||||||
|
|||||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Сорри - браузер глюкнуло
Добавлено через 3 минуты и 18 секунд
Речь идёт просто про смену лейоута, а не изменение. Для этого нужно удаление согласно ассистенту.
Повторюсь, я думал, что сие в коде реализации класса виджета, используемого как централа. И в приципе не только в формах - а также в любых собственных виджетах Это сообщение отредактировал(а) Любитель - 28.7.2007, 22:38 |
||||
|
|||||
| Mal Hack |
|
||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Если этого не написать, то два элемента открываются в двух разных окнах: test <2>, test <3>. Я так понимаю, создаваемый виджет, который предложил powerfox "ляжет" на окно QMaonWindow, как основной, а мои виджеты лягут на него. Так? По сути это получается как панель (GroupBox безе legend) в Delphi? В данном случае не очень хочу создавать дополнительный виджет. Это, имхо, обход проблемы, а не ее решение. Попробовал так:
В результате, что с раскомментированным SetupUI что с закомментированным, получаю при запуске: Segmentation fault При таком варианте, позиционирование не таблице, чтоб красиво - не производится, но по крайней мере элементы уже нормально видны на форме, но все идут из точки 0-0.
Это сообщение отредактировал(а) Mal Hack - 28.7.2007, 22:48 |
||||||
|
|||||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |