Помогите разобраться с отрисовкой виджета |
Здравствуйте, гость ( Вход | Регистрация )
Помогите разобраться с отрисовкой виджета |
XpycT |
20.7.2009, 17:51
Сообщение
#1
|
|
Студент Группа: Участник Сообщений: 43 Регистрация: 7.7.2009 Пользователь №: 883 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем доброго времени суток
С Qt знаком всего полторы недели, и то, все это время читал книги. Вот захотелось реализовать виджет выбора рисунка (не хочется делать просто текстовое поле с адресом). За основу взял исходники примера с гита Qt. Но к моему сожалению понял, что прочитанных разделов о графике в книгах не достаточно . Хочется сделать что-то типа такого : Но напоролся на пару вопросов: 1) Как в mouseMoveEvent определить потерю фокуса мыши (event->Leave почемуто действует аналогично event->Enter)? 2) Каким образом прикрутить сигнал/слот к иконке "Открыть"/"Очистить", если они выведены через painter.drawPicture Вот те исходники, над которыми я прыгал с бубном imagewidget.zip ( 2.48 килобайт ) Кол-во скачиваний: 159 За раннее благодарю за помощь |
|
|
||
XpycT |
22.7.2009, 16:40
Сообщение
#21
|
Студент Группа: Участник Сообщений: 43 Регистрация: 7.7.2009 Пользователь №: 883 Спасибо сказали: 0 раз(а) Репутация: 0 |
самая распространенная ошибка, если не ошибаюсь, людей только что представленных С++. На самом деле с С++ знаком не так давно. До этого сидел только на С#, но т.к. не особо радовало Mono для linux систем, решил перейти на Qt. С сигналами всеравно не разобрался.. в дебаге вроде все прекрасно...после выбора рисунка нормально скалит, выводит зум и путь к рисунку.
но рисунок не появляется, и следующий вывод i_fileName возвращает пустую строку. Пришел к тому с чего начал - вернул диалог обратно в виджет, хоть так работает |
|
|
Litkevich Yuriy |
22.7.2009, 16:52
Сообщение
#22
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Слот у тебя приватный, а присоединяешь его к сигналу, поступаемому от чужого класса, никак не связанного с данным. Сделай слот public. он соеденяет со своим (this) слотом, который этим (this) классом видится. А а сигнал виден всегда, если виден объект.при чем тут слоты? угу
ты посмотри что написал то? |
|
|
kwisp |
22.7.2009, 16:54
Сообщение
#23
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
XpycT,
С сигналами всеравно не разобрался.. не понял тебя. на всякий случай напишу. ты сделал класс членами которого являются ImageWidget screen1,screen2. Заметь это не указатели а объекты. при вызове конструктора класса они благополучно инициализируются в списке инициализации конструкторами по умолчанию(хоть ты их и не трогаешь явно с++ это делает за тебя) за тем ты зачем не ясно объявляешь( и инициализируешь из кучи) в конструкторе локальные переменные указетели одноименные с твоими объектами класса ImageWidget* screen1, *screen2. потом вообще весело ты соединяешь сигнал одного локально видимого динамически созданного обекта screen1 с каким то слотом(не важно каким) надеясь что вызовется сигнал. вариантов поправить эту ошибку много один из вариантов будет таким:
пробуй теперь. здесь я оставил объекты ImageWidget как есть а вообще тролли настоятельно рекомендуют создавать виджеты динамически. Сообщение отредактировал kwisp - 22.7.2009, 17:10 |
|
|
ufna |
22.7.2009, 16:54
Сообщение
#24
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
Цитата категорически не согласен сигналы вообще protected и нормально коннектятся. пример с приватным слотом ты сам мне приводишь пример, где Sender - член класса Rec. В конструкторе же у Хруста создается новый объект, никак не связанный с изначальным классом: ImageWidget *screen1=new ImageWidget; И соединяет он этот screen1, а не TestApp::screen1. И доступа к приватному слоту у этого объекта быть не должно. дополнение: про this понял Сообщение отредактировал ufna - 22.7.2009, 16:56 |
|
|
kwisp |
22.7.2009, 16:58
Сообщение
#25
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
ufna,
не пойму тебя приведи свой пример. вот мой модифицированный Раскрывающийся текст
или так Раскрывающийся текст
что теперь скажете? П.С. что то я сегодня плохо понимаю. пойду на пляж в волейбол играть. Сообщение отредактировал kwisp - 22.7.2009, 17:04 |
|
|
ufna |
22.7.2009, 17:15
Сообщение
#26
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
kwisp, сорри, тупил. После поста Юрия в доки глянул, понял.
Как то всегда руководствовался правилом - private slot - для внутренних объектов, public slot - для внешних. Изначально как понял, так и делал. Блин ) Сообщение отредактировал ufna - 22.7.2009, 17:18 |
|
|
kwisp |
22.7.2009, 17:23
Сообщение
#27
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
ufna,
принимается. со всяким бывает. |
|
|
ufna |
22.7.2009, 17:24
Сообщение
#28
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
|
|
|
XpycT |
22.7.2009, 17:52
Сообщение
#29
|
Студент Группа: Участник Сообщений: 43 Регистрация: 7.7.2009 Пользователь №: 883 Спасибо сказали: 0 раз(а) Репутация: 0 |
твою ж... точно не правильно виджеты создал. Вот что значит невнимательность. Спасибо все работает.
Вот только хотел спросить , как правельнее создать одинаковые QObject::connect'ы перебором, если у меня допустим их штук 20. Ведь как я понимаю - не правильно будет их дублировать типа
видел макросы типа qobject_cast, qvariant_cast... но не совсем понял как ими пользоваться |
|
|
Litkevich Yuriy |
22.7.2009, 18:16
Сообщение
#30
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
XpycT, для случая разных отправителей, лучше используй "карту сигналов" QSignalMaper, я где-то пример на форуме давал, да и в Асистенте он описан достаточно.
П.С. или "отображатель сигналов", или "перенаправитель сигналов", или "коллектор сигналов" не знаю как лучше сказать |
|
|
Текстовая версия | Сейчас: 11.5.2024, 18:17 |