Russian Qt Forum
Ноябрь 27, 2024, 03:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Хочу принять Окончательное решение по QT, Вопрос...  (Прочитано 8657 раз)
0x0001
Гость
« : Март 07, 2010, 22:06 »

хочу сравнить QT в ставнении с MFC... для решения перехода...
в голову пришла простая задача, к примеру, менять подсветку Кнопки (или рисунок на ней) при Фокусе мыши....
в MFC:
1. создаю COwnedDrawButton от CButton , переопределяю DrawItem(LPDRAWITEMSTRUCT lpDrw)
2. далее перехватываю событие OnMouseMove(nFlag,CPoint) ,
3. далее Api Шной функцией PtInRect(..,CPoint) проверяю в пределах ли нужной области - Флаг.
4. если в пределах области (Флаг) - подгружаю нужный BITMAP/PNG по WM_PAINT(это DrawItem для контрола) или просто меняю цвет заливки DC (можно с Transparency)
5. 10 минут ВСЁ!!!
КАК Это сделать с QT классами Непонимающий QPushButton Непонимающий Какие "сигналы" использовать Непонимающий
СПасибо
Записан
BRE
Гость
« Ответ #1 : Март 07, 2010, 22:11 »

Все это легко делается без всякого кода, используя только style sheet.

Если хочется покодить, то можно переопределить:
void QWidget::enterEvent ( QEvent * event )   [virtual protected]
void QWidget::leaveEvent ( QEvent * event )   [virtual protected]

или использовать eventFilter. Смотри:
void QObject::installEventFilter ( QObject * filterObj )
Записан
0x0001
Гость
« Ответ #2 : Март 07, 2010, 22:20 »

mouseMoveEvent ( QMouseEvent * event ) Непонимающий
ОК, попробую замутить код , чтобы прочувствовать идею Подмигивающий
Записан
BRE
Гость
« Ответ #3 : Март 07, 2010, 22:22 »

mouseMoveEvent ( QMouseEvent * event ) Непонимающий
Зачем тебе mouseMoveEvent? Что бы покодить побольше?  Подмигивающий
Записан
0x0001
Гость
« Ответ #4 : Март 07, 2010, 22:40 »


Зачем тебе mouseMoveEvent? Что бы покодить побольше?  Подмигивающий
[/quote]
КАК Зачем??? по аналогии с OnMouseMove(), вычисляю координаты положения курсора уст. флаг по которому по WM-PAINT далее определяю соответствующий Статусу кнопки цвет...

а как ещё ?
Записан
BRE
Гость
« Ответ #5 : Март 07, 2010, 23:04 »

КАК Зачем??? по аналогии с OnMouseMove(), вычисляю координаты положения курсора уст. флаг по которому по WM-PAINT далее определяю соответствующий Статусу кнопки цвет...

а как ещё ?
Тебе нужно знать два момента, когда курсор мыши переместился на виджет (кнопку) и когда он вышел из этой области.
Два этих события генерируются Qt.
Но если хочется по-вычислять, то можно и mouseMoveEvent...  Подмигивающий
Записан
SABROG
Гость
« Ответ #6 : Март 08, 2010, 02:49 »

Без css можно сделать через state machine, кусок кода из примера Event Transitions:

Код
C++ (Qt)
        QEventTransition *enterTransition = new QEventTransition(button, QEvent::Enter);
        enterTransition->setTargetState(s2);
        s1->addTransition(enterTransition);
 
        QEventTransition *leaveTransition = new QEventTransition(button, QEvent::Leave);
        leaveTransition->setTargetState(s1);
        s2->addTransition(leaveTransition);
 

При входе в состояние генерятся сигналы. QEventTransition генерит triggered(), а QState генерит entered(). Слот можно повесить на любой из них, а в слоте можно менять картинку или цвет виджета, например QWidget::setForegroundRole()/setBackgroundRole(), ну или через QPalette.

P.S.: если нужно менять только картинку, то у класса QIcon есть метод addPixmap(const QPixmap & pixmap, Mode mode = Normal, State state = Off), для каждого состояния можно задать свою картинку, а потом иконку добавить на кнопку через setIcon.
« Последнее редактирование: Март 08, 2010, 03:15 от SABROG » Записан
ритт
Гость
« Ответ #7 : Март 08, 2010, 03:17 »

интересно, как можно код портировать с MFC на QuickTime? irjkjnf...
Записан
SABROG
Гость
« Ответ #8 : Март 08, 2010, 03:25 »

интересно, как можно код портировать с MFC на QuickTime? irjkjnf...

Добавь себе в подпись:
QT - QuickTime
Qt - Qt Development Frameworks

Чтобы народ учился.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 08, 2010, 12:02 »

Добавь себе в подпись:
QT - QuickTime
Qt - Qt Development Frameworks

Чтобы народ учился.
"Кстати о птичках" - а есть ли поддержка QuickTime в Qt? Мне приходится держать QuickTime на 2 платформах, для mov файлов и большинства графических файлов. Это обходится мне недешево.

Заранее спасибо за информацию
Записан
0x0001
Гость
« Ответ #10 : Март 08, 2010, 12:24 »

Без css можно сделать через state machine, кусок кода из примера Event Transitions:

А КАК это с SST ?
Записан
0x0001
Гость
« Ответ #11 : Март 08, 2010, 12:30 »

интересно, как можно код портировать с MFC на QuickTime? irjkjnf...
эту фразу тоже не понял, объясните пож новичку!
Записан
SABROG
Гость
« Ответ #12 : Март 08, 2010, 12:45 »

"Кстати о птичках" - а есть ли поддержка QuickTime в Qt? Мне приходится держать QuickTime на 2 платформах, для mov файлов и большинства графических файлов. Это обходится мне недешево.

Заранее спасибо за информацию
Насколько я знаю Phonon использует кодеки, которые установлены в системе. Встроенных в Qt нет.

А КАК это с SST ?
Вопроса не понял. Тебе полный пример нужен или что? Пример называется Event Transition и есть в папке examples.

эту фразу тоже не понял, объясните пож новичку!
Разница в написании второй буквы. Если она большая, то это QuickTime, если маленькая, то Qt Development Frameworks.
Записан
ритт
Гость
« Ответ #13 : Март 08, 2010, 18:58 »

да-да, разница примерно такая, как между 0x0001 и 0x1000
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Март 08, 2010, 21:16 »

да-да, разница примерно такая, как между 0x0001 и 0x1000
Это одно и то же число в little и big endian
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.