![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
skytrain |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 3.3.2013 Пользователь №: 3734 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день всем.
Тут такое дело. (программист из меня не сильно хороший, так что строго не судите) Пытаюсь связать воедино механизм сигналов\слотов с событиями(просто для понимания процесса вообще) Основываясь на статье http://symmetrica.net/qt4/lesson3.htm переписал код исключив класс OGLWindow. =====widget.cpp=========
Суть задачи: Как сделать так, чтоб по нажатию кнопки происходила отрисовка не на виджете а на QFrame. Суть вопроса: 1. Здесь в коде я сам в конструкторе класса создаю событие. Нужно-ли это???? Предполагаю что нет, но не представляю как реализовать. Отсюда следует вопрос: Как заставить QFrame сгенерировать событие QpaintEvent по нажатию кнопки и как его обработать? 2. Так-как нельзя редактировать сигналы и слоты формы...... кому отсылать сигнал из формы, если сигналы и слоты могут соединяться только внутри одного класса. Пока что так. Если я не прав, прошу поправить. С уважением..... |
|
|
RazrFalcon |
![]()
Сообщение
#2
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Не вижу где вызываются SendSignal и ToDraw...
А так, предопределяем QFrame и в его paintEvent рисуем картинку. PS: если нужна картинка без излишеств. То проще всего вставить QImage в QLabel. Это намного проще. |
|
|
skytrain |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 3.3.2013 Пользователь №: 3734 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Не вижу где вызываются SendSignal и ToDraw... Пока нигде. Я надеюсь заполнить их кодом. Я хочу разобраться в механизме обработки событий. От того и заморачиваюсь. А так, предопределяем QFrame и в его paintEvent рисуем картинку. Можно отсюда поподробнее... плз В смысле переопределяем. Нужно новый обьект QFrame... или новый класс QFrame |
|
|
RazrFalcon |
![]()
Сообщение
#4
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Нужно наследоваться от QFrame.
То есть создать новый класс, родителем которого будет QFrame. Типа:
Сообщение отредактировал RazrFalcon - 3.3.2013, 23:40 |
|
|
skytrain |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 3.3.2013 Пользователь №: 3734 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ну да. В принципе вернулись к первоисточнику...
При создании экземпляра PreviewFrame в конструктор передаем имя объекта формы на которой будем рисовать. Так? Тогда зачем функция drawImage? Она как-то сгенерирует событие? Если так, то можно ее оформить в виде слота?
Спасибо. Сори. Как доставляются события Когда происходит событие, то для его представления Qt создаёт объект события, - создавая экземпляр соответствующего подкласса QEvent, - и доставляет его отдельному экземпляру класса QObject (или одного из его подклассов), вызывая его функцию event(). Эта функция не обрабатывает событие сама; основываясь на типе доставленного события, она вызывает обработчик событий для данного конкретного типа события и отправляет ответ на основе того, будет ли событие принято или проигнорировано. Некоторые события, например, QMouseEvent и QKeyEvent, поступают из оконной системы; некоторые, например, QTimerEvent, поступают из других источников; некоторые поступают из самого приложения. Это отсюда http://doc.crossplatform.ru/qt/4.6.x/eventsandfilters.html Если можно, то посвятите. Когда наступает событие QPaintEvent И еще раз извините, за то, что задаю такие простые вопросы. |
|
|
RazrFalcon |
![]()
Сообщение
#6
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Тогда зачем функция drawImage? Ыыыы, нет. paintEvent обычно вызывается сам по себе или через update();Она как-то сгенерирует событие? и каждый раз нужно перерисовывать картинку, в данном случае. По сути в paintEvent вы должны рисовать все что нужно. Но сам paintEvent вы не вызываете. Сообщение отредактировал RazrFalcon - 4.3.2013, 0:30 |
|
|
skytrain |
![]()
Сообщение
#7
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 3.3.2013 Пользователь №: 3734 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо.
Надо это как то переварить. Попробую drawImage оформить слотом. Ох ну дела..... Отпишусь потом. Если получится. |
|
|
skytrain |
![]()
Сообщение
#8
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 3.3.2013 Пользователь №: 3734 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Так вот.
Основная задумка - использовать слот drawImage для перерисовки. Естественно куча ошибок ![]()
Я не знаю. Если это оффтоп, то смело удаляйте, но.... В голове каша получилась. Основная задумка - это использование кнопки для перерисовки изображения. |
|
|
lanz |
![]()
Сообщение
#9
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Количество аргументов в слоте должно быть меньше или равно количеству аргументов сигнала. Кстати метод update () тоже является слотом. Можно к нему подсоединится. PreviewFrame должен быть дочерним у виджета по идее (а то получается что один фрейм внутри другого). Удали его из дизайнера и в коде добавляй в нужный лэйаут. |
|
|
Алексей1153 |
![]()
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 16.2.2025, 17:15 |