Глава 14. Создание элементов графического интерфейса
Наш предыдущий пример содержит поле ввода с пиктограммой. Для того что-
бы реализовать реакцию на нажатие клавиши мыши на пиктограмму, но не со-
здавать своего класса, унаследованного от класса метки с пиктограммой, мы до-
бавим фильтр событий, который будет посылать сигнал, если для пиктограммы
поступит событие типа QEvent::MouseButtonPress. Добавим объявление класса
QEvent
:
#include Установим фильтр событий для метки:
mIconLabel−>installEventFilter(this);
И добавим фильтр событий для метки в файле IconizedLineEdit.h:
c l a s s I c o n i z e d L i n e E d i t : public QLineEdit
{
Q_OBJECT
public :
. . . . .
void s e t I c o n C l i c k a b l e ( bool p I s I c o n C l i c k a b l e ) ;
. . . . .
s i g n a l s :
void i c o n P r e s s e d ( ) ;
protected :
. . . . .
bool e v e n t F i l t e r ( QObject ∗ pObject , QEvent ∗ pEvent ) ;
. . . . .
private :
. . . . .
bool m I s I c o n C k l i c k a b l e ;
} ;
В файле IconizedLineEdit.cpp:
bool I c o n i z e d L i n e E d i t : : e v e n t F i l t e r ( QObject ∗ pObject , QEvent ∗ pEvent )
{
i f ( m I s I c o n C k l i c k a b l e )
{
i f ( ( pObject==mIconLabel ) && ( pEvent
−>type ( )== QEvent : : MouseButtonPress ) )
{
emit i c o n P r e s s e d ( ) ;
return true ;
}
}
return f a l s e ;
}
//Установить режим реакции на нажатие мышкой на пиктограмму
void I c o n i z e d L i n e E d i t : : s e t I c o n C l i c k a b l e ( bool p I s I c o n C l i c k a b l e )
{
m I s I c o n C k l i c k a b l e = p I s I c o n C l i c k a b l e ;
//Устанавливаем вид курсора при наведении на метку с пиктограммой
i f ( m I s I c o n C k l i c k a b l e )
{
mIconLabel−>s e t C u r s o r ( Qt : : PointingHandCursor ) ;
}
e l s e
{
mIconLabel−>s e t C u r s o r ( Qt : : ArrowCursor ) ;
}
}
Наш класс для поля ввода с пиктограммой одновременно выступает филь-
тром событий для метки.
Добавим реакцию на нажатие к двум полям в mainwindow.cpp. Первое поле
будет открывать диалог выбора файла и записывать путь к файлу. Последнее
поле будет стирать своё содержимое в ответ на нажатие пиктограммы:
Программирование на языке С++ в среде Qt Creator