Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
guest13 |
13.11.2008, 14:48
Сообщение
#1
|
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: 0
|
Имеется 2 виджета. Необходимо реализовать такую ситуацию - при запуске программы появляется только 1 виджет, а второй запускается только после нажатия кнопки на 1-м виджете.
набросал вот такой код (просто запускается 2 виджета, на обоих имеются кнопки, которые закрывают программу (quit())). Раскрывающийся текст прошу помощи. |
|
|
|
|
Litkevich Yuriy |
13.11.2008, 14:55
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(guest13 @ 13.11.2008, 17:48) Link w1.show(); ты их сам сразу оба показалw2.show(); соответственно в main'е покажи только один. Встречный вопрос: что ты предпринял, чтобы по нажатию кнопки отображался другой виджет? Раскажи логику своих действий. |
|
|
|
|
guest13 |
13.11.2008, 14:55
Сообщение
#3
|
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 13.11.2008, 14:52) Link Цитата(guest13 @ 13.11.2008, 17:48) Link w1.show(); ты их сам сразу оба показалw2.show(); да. но если 2-ю строчку закомментировать, то 2-й виджет и не будет показываться. как я понимаю надо сделать что-то вроде следующего только у меня не получается... |
|
|
|
|
Litkevich Yuriy |
13.11.2008, 14:57
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(guest13 @ 13.11.2008, 17:48) Link которые закрывают программу (quit())). к стати сказать не верю, что она закрываетсяЦитата(guest13 @ 13.11.2008, 17:55) Link только у меня не получается... в это верю, т.к. не верю в предыдущее
|
|
|
|
|
guest13 |
13.11.2008, 15:00
Сообщение
#5
|
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 13.11.2008, 14:57) Link Цитата(guest13 @ 13.11.2008, 17:48) Link которые закрывают программу (quit())). к стати сказать не верю, что она закрываетсяЭм-м... в чем причины сомнений? обе кнопки закрывают приложение qApp.... (только что ещё разок проверил) |
|
|
|
|
Litkevich Yuriy |
13.11.2008, 15:12
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
для начала, вынеси виджеты в отдельные пары файлов (h/cpp), будем считать, что в дальнейшем они могут сильно отличатся (хотя сейчас их лучше обеденить в один и сделать функции для установки нужных параметров).
Затем Цитата(guest13 @ 13.11.2008, 17:55) Link connect(q1, SIGNAL(clicked()), w2, SLOT(show())); насчет соеденить сигнал clicked со слотом show правильная, но видимо ты это решил проделать внутри виджета w1 (MyWid1), который ничего не знает о виджете w2 (MyWid2). при этом компилер (GCC, например) небудет ругатся, т.к. сигнально-слотовыми вещами занимается MOC (метаобъектный компилятор), а он будет ругатся в рантайме, но в консоль ошибок.Дабы ты научился ловить такие ошибки, добавь в pro-файл такую строку: CONFIG +=console при запуске приложения у тебя появится консоль в которой будут сообщения об ошибках соединений сигналов и слотов. Цитата(guest13 @ 13.11.2008, 18:00) Link обе кнопки закрывают приложение qApp.... хм, ну видимо тебе повезло, что ты своих сигналов/слотов не создавал.(только что ещё разок проверил) вобщем логика: создал виджет 1 создал виджет 2 соеденил сигнал 1-го со слотом 2-го показал 1-ый запустил цикл событий приложения (соображай где все эти действия нужно проделать!) теперь электричество: нажал кнопку на 1-ом, пошел сигнал, т.к. соединен со слотом, сработал слот, отобразился второй виджет. |
|
|
|
|
guest13 |
13.11.2008, 15:32
Сообщение
#7
|
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: 0
|
таак-с...
Цитата(Litkevich Yuriy @ 13.11.2008, 15:12) Link для начала, вынеси виджеты в отдельные пары файлов (h/cpp), будем считать, что в дальнейшем они могут сильно отличатся (хотя сейчас их лучше обеденить в один и сделать функции для установки нужных параметров). сначала буду с этим разбираться.... пока не очень ясна для меня картина создания виджетов в паре файлов... но тут в Учебном пособии, вроде разжеванна эта процедура Цитата(Litkevich Yuriy @ 13.11.2008, 15:12) Link Цитата(guest13 @ 13.11.2008, 18:00) Link обе кнопки закрывают приложение qApp.... хм, ну видимо тебе повезло, что ты своих сигналов/слотов не создавал.(только что ещё разок проверил) хм-м...можно тогда пояснить, почему мне повезло и так не нужно делать? эту конструкцию я взял из Учебного Пособия... Цитата(Litkevich Yuriy @ 13.11.2008, 15:12) Link вобщем логика: создал виджет 1 создал виджет 2 соеденил сигнал 1-го со слотом 2-го показал 1-ый запустил цикл событий приложения (соображай где все эти действия нужно проделать!) теперь электричество: нажал кнопку на 1-ом, пошел сигнал, т.к. соединен со слотом, сработал слот, отобразился второй виджет. не очень уловил про "цикл событий приложения" по поводу того, где это надо проделывать.... виджеты описать в отдельных файлах, затем в h-файлах связать сигналы. затем в main создать оба виджета и показать только 1-й.... так?
Причина редактирования: не дави дважды кнопку "отправить"!
|
|
|
|
|
Litkevich Yuriy |
13.11.2008, 15:51
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(guest13 @ 13.11.2008, 18:32) Link сначала буду с этим разбираться.... пока не очень ясна для меня картина создания виджетов в паре файлов... но тут в Учебном пособии, вроде разжеванна эта процедура в заголовочный файл пишим объявление класса:В *.cpp - реализацию Цитата(guest13 @ 13.11.2008, 18:32) Link хм-м...можно тогда пояснить, почему мне повезло и так не нужно делать? при использовании собственных слотов и сигналов, у тебя должен быть макрос Q_OBJECT в объявлении класса, приэтом запустится MOC, он создает еще по файлу на каждый файл с классом содержащим этот макрос, тогда при размещении и объявлении класса в одном файле приходится этот автоматически созданый файл к себе подключать это неудобно (ведь его нет до компиляции).эту конструкцию я взял из Учебного Пособия... П.С. что за Учебное пособие? Цитата(guest13 @ 13.11.2008, 18:32) Link не очень уловил про "цикл событий приложения" Эта запись запускает цикл событий приложения:Цитата(guest13 @ 13.11.2008, 17:48) Link app.exec(); Цитата(guest13 @ 13.11.2008, 18:32) Link по поводу того, где это надо проделывать.... Я умышленно написал все этапы и закончил их циклом событий приложения, чтобы показать что это все попорядку в одной функции (теперь максимально подсказал)
|
|
|
|
|
guest13 |
13.11.2008, 16:30
Сообщение
#9
|
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 13.11.2008, 15:51) Link П.С. что за Учебное пособие? вот это Link с h/cpp вроде немного разобрался, спасибо. Только я чуть раньше написал сам P.S. to Модератор я не давлю дважды на кнопочку "отправить".... у меня на работе из-за прокси-сервера или ещё чего-нибудь запросы отправляются 3-ды.... я и почту постоянно по 3 письма отправляю... не судите строго, или разрешите мне править свои сообщения, я обычно сам удаляю лишние |
|
|
|
|
guest13 |
14.11.2008, 10:10
Сообщение
#10
|
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 9.10.2008 Пользователь №: 386 Спасибо сказали: 0 раз(а) Репутация: 0
|
и снова здравствуйте)
хочу похвастаться, что всё-таки я сделал то что хотел! в итоге я сделал так в wid1.h добавил вот такой сигнал в wid2.h добавил вот такой слот в wid2.cpp описал слот таким образом в wid1.cpp свзязал сигнал кнопки с сигналом испускаемым виджетом wid1 ну и напоследок в main.cpp связал сигнал одного виджета со слотом другого и спросить - не слишком ли я намудрил со слотами и сигналами...может можно как-то упростить? |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 10.11.2025, 16:29 |