![]() |
|
|
![]()
|
|
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
Необходимо на форму выложить 3 любых виджета и скомпоновать их по горизонтали. Добавить кнопку, по нажатию на которую надо менять компоновку с горизонтальной на вертикальную и обратно, как это сделать правильно?
Не работает так, как сделала:
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Что значит "не работает"? А что происходит? Что в консоль отладки сыпится?
Чтобы заменить дефолтный layout у виджета, необходимо удалить старый. Когда ты делаешь new VBoxLayout(this) ты пытаешься установить новый дефолтный layout: http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, ничего не сыпется,просто ничего не меняется на форме. Вот я понимаю,что надо удалить старый,а как это сделать?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, прочитай документацию, ссылку на которую я дал. Там черным по белому написано, что нужно сделать.
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, я читаю, но может чего то не вижу или не понимаю?
Написано: You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout. Хорошо, но как? В примере это не показано:
То же самое делается и у меня в программе |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Разве не очевидно? |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa: В первую очередь вы должны удалить существующий лэйаут ( возвращаемый layout()) прежде чем вы сможете вызвать setLayout() с новым лэйаутом.
Т.е. я так понимаю lyaout() вернет то, что сейчас активно и этот лэйаут надо удалить. Но покажите мне где написано, каким образом удалять? Или я тупая? Я только знакомлюсь с Qt, соответственно много еще не знаю Добавлено через 6 минут и 2 секунды bsa, мне нет |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, так тоже не работает
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, тогда выкладывай полностью минимальный код, который позволит воспроизвести проблему. Ты уверена, что у тебя вообще выполняются эти действия? Отладчиком проходила?
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
кстати
this->layout() ничего не возвращает и в окне ,где показываются величины, пишет, что <no such value> Если я напрямую ставлю delete ui->horizontalLayout; то тоже не работает. Дело в том, что компановка только для 3-х элементов ( у меня это Label, EditText , ComboBox), компановки на основном окне нет. Добавлено через 3 минуты и 45 секунд bsa, да выполняются, там нечему выполняться Сильно не смеяться, вот с этим я пытаюсь эксперементировать:
На форме 3 элемента, про которые написала выше, объединенные горизонтальной компоновкой, и кнопка лежит отдельно от них Добавлено через 5 минут и 8 секунд в данном случае, после выполнения кода внутри if выходит сообщение:"Приложение остановлено, так как оно получило сигнал от операционной системы" |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
ох
ну ты и намудрила.
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, да,я могу ;)
но суть то от этого не изменилась? |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, всё равно не работает
Во-первых на строке
выдает ошибку: D:\WORK\QT projects\zadanie8\mainwindow.cpp:40: ошибка: conditional expression between distinct pointer types 'QHBoxLayout*' and 'QVBoxLayout*' lacks a cast Убрала это, написала условие через If. Проходит до конца процедуры,а потом выдает всё ранво ошибку:"Приложение остановлено, так как оно получило сигнал от операционной системы" |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, запусти под отладчиком. И смотри где упадет.
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, ну вот здесь сразу падает:
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |