![]() |
|
|
![]()
|
|
| 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, ну вот здесь сразу падает:
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, ты сказала, что заменила на if. По идее, данная строка должна была превратиться в:
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, да, я так делала, в этом случае доходит до конца процедуры. Далее отладчик попападает в ассемблеровский код и вот здесь вылетает:
Function: QListData::isEmpty() const 0xb16658 <+0x0000> push %ebp 0xb16659 <+0x0001> mov %esp,%ebp 0xb1665b <+0x0003> sub $0x4,%esp 0xb1665e <+0x0006> mov %ecx,-0x4(%ebp) 0xb16661 <+0x0009> mov -0x4(%ebp),%eax 0xb16664 <+0x000c> mov (%eax),%eax 0xb16666 <+0x000e> mov 0xc(%eax),%edx |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, стек смотри. Возможно по нему можно будет определить где возникла проблема. А уже из этого понять, как ее исправить.
Попробуй переписать код так:
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
а как его смотреть? Добавлено через 8 минут и 1 секунду на это дало ошибку , но уже в другом месте Function: QListData::size() const 0xd46614 <+0x0000> push %ebp 0xd46615 <+0x0001> mov %esp,%ebp 0xd46617 <+0x0003> sub $0x4,%esp 0xd4661a <+0x0006> mov %ecx,-0x4(%ebp) 0xd4661d <+0x0009> mov -0x4(%ebp),%eax 0xd46620 <+0x000c> mov (%eax),%eax 0xd46622 <+0x000e> mov 0xc(%eax),%edx |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
Кстати, вот такой вариат :
вообще без проблем работает |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, я не знаю твоего задания.
В принципе, очень интересный способ. В этом случае можно использовать QBoxLayout вместо QHBoxLayout. |
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, всё задание в первом сообщении на 1-й странице. Больше ничего нет. Дело в том, что мне просто дали видео с лекции, к нему очень (ну очень) краткий конспект и вот эти задания. Сказали, что так быстрее обучаться. Тонкости по заданию я не знаю, т.к. на лекции не присутствовала
Вот здесь можно посмотреть http://www.zmartzoft.ru/projects/qtinception/wiki/day1 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
думаю, сойдет.
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, ну всё равно интересно почему не работает?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
возможно из-за того, что я говорю про дефолтный компоновщик, а ты работаешь с отдельным.
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa,но в задании то указано, что надо элементы скомпоновать.
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, но там не указано, что компоновщик должен быть самостоятельным. Если ты нажмешь правой кнопкой на форме и добавишь компоновщик, то это тоже будет "скомпоновать".
|
|||
|
||||
| Aline |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 470 Регистрация: 22.7.2005 Где: Таруса Репутация: нет Всего: нет |
bsa, но я так поняла, что компануются именно 3 любых элемента,а затем уже отдельно добавляется кнопка, не так?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Aline, проще уточнить у препода
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |