Russian Qt Forum

Qt => Общие вопросы => Тема начата: 0x0001 от Март 07, 2010, 22:06



Название: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: 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 ??? Какие "сигналы" использовать ???
СПасибо


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: BRE от Март 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 )


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: 0x0001 от Март 07, 2010, 22:20
mouseMoveEvent ( QMouseEvent * event ) ???
ОК, попробую замутить код , чтобы прочувствовать идею ;)


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: BRE от Март 07, 2010, 22:22
mouseMoveEvent ( QMouseEvent * event ) ???
Зачем тебе mouseMoveEvent? Что бы покодить побольше?  ;)


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: 0x0001 от Март 07, 2010, 22:40

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

а как ещё ?


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: BRE от Март 07, 2010, 23:04
КАК Зачем??? по аналогии с OnMouseMove(), вычисляю координаты положения курсора уст. флаг по которому по WM-PAINT далее определяю соответствующий Статусу кнопки цвет...

а как ещё ?
Тебе нужно знать два момента, когда курсор мыши переместился на виджет (кнопку) и когда он вышел из этой области.
Два этих события генерируются Qt.
Но если хочется по-вычислять, то можно и mouseMoveEvent...  ;)


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: SABROG от Март 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.


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: ритт от Март 08, 2010, 03:17
интересно, как можно код портировать с MFC на QuickTime? irjkjnf...


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: SABROG от Март 08, 2010, 03:25
интересно, как можно код портировать с MFC на QuickTime? irjkjnf...

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

Чтобы народ учился.


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: Igors от Март 08, 2010, 12:02
Добавь себе в подпись:
QT - QuickTime
Qt - Qt Development Frameworks

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

Заранее спасибо за информацию


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: 0x0001 от Март 08, 2010, 12:24
Без css можно сделать через state machine, кусок кода из примера Event Transitions:

А КАК это с SST ?


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: 0x0001 от Март 08, 2010, 12:30
интересно, как можно код портировать с MFC на QuickTime? irjkjnf...
эту фразу тоже не понял, объясните пож новичку!


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: SABROG от Март 08, 2010, 12:45
"Кстати о птичках" - а есть ли поддержка QuickTime в Qt? Мне приходится держать QuickTime на 2 платформах, для mov файлов и большинства графических файлов. Это обходится мне недешево.

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

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

эту фразу тоже не понял, объясните пож новичку!
Разница в написании второй буквы. Если она большая, то это QuickTime, если маленькая, то Qt Development Frameworks.


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: ритт от Март 08, 2010, 18:58
да-да, разница примерно такая, как между 0x0001 и 0x1000


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: Igors от Март 08, 2010, 21:16
да-да, разница примерно такая, как между 0x0001 и 0x1000
Это одно и то же число в little и big endian


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: BRE от Март 08, 2010, 21:25
Это одно и то же число в little и big endian
Нет.


Название: Re: Хочу принять Окончательное решение по QT, Вопрос...
Отправлено: ритт от Март 08, 2010, 21:41
да-да, разница примерно такая, как между 0x0001 и 0x1000
Это одно и то же число в little и big endian
Нет.
как бы там ни было, 0x0001 != 0x1000
как и ник "0x0001" не может быть адекватно заменён на "адын" - в том посте я лишь это хотел сказать...