Глава 14. Создание элементов графического интерфейса
Добавим к файлу iconizedlineedit.cpp реализацию для этих методов.
//Устанавливает режим отображения для пиктограммы
void I c o n i z e d L i n e E d i t : : s e t I c o n V i s i b i l i t y ( I c o n V i s i b i l i t y M o d e
p I c o n V i s i b i l i t y M o d e )
{
//Сохранение режима
m I c o n V i s i b i l i t y M o d e = p I c o n V i s i b i l i t y M o d e ;
//Выполняем изменения соответсвенно к установленому значению
switch ( p I c o n V i s i b i l i t y M o d e )
{
case I c o n A l w a y s V i s i b l e :
s e t I c o n V i s i b l e ( true ) ;
break ;
case IconVisibleOnEmptyText :
case I c o n V i s i b l e O n T e x t P r e s e n c e :
s l o t T e x t C h a n g e d ( t e x t ( ) ) ;
break ;
defa ult :
s e t I c o n V i s i b l e ( f a l s e ) ;
break ;
}
}
//Реализует реакцию на изменение текста в поле для режимов IconVisibleOnEmptyText
//и IconVisibleOnNotEmptyText
void I c o n i z e d L i n e E d i t : : s l o t T e x t C h a n g e d ( const QStri ng &pText )
{
i f ( IconVisibleOnEmptyText == m I c o n V i s i b i l i t y M o d e )
{
s e t I c o n V i s i b l e ( pText . isEmpty ( ) ) ;
}
e l s e i f ( I c o n V i s i b l e O n T e x t P r e s e n c e == m I c o n V i s i b i l i t y M o d e )
{
s e t I c o n V i s i b l e ( ! pText . isEmpty ( ) ) ;
}
}
//Сделать пиктограмму видимой или спрятать
void I c o n i z e d L i n e E d i t : : s e t I c o n V i s i b l e ( bool p I s V i s i b l e )
{
//Показать/скрыть метку с пиктограммой
mIconLabel−>s e t V i s i b l e ( p I s V i s i b l e ) ;
}
Для того, чтобы слот slotTextChanged(QString) работал, добавим в кон-
структор сигнально-слотовое соединение. Также добавим начальную инициали-
зацию для поля mIconVisibilityMode.
//Конструктор класса
I c o n i z e d L i n e E d i t : : I c o n i z e d L i n e E d i t ( QWidget ∗ p a r e n t ) : QLineEdit ( p a r e n t ) ,
m I c o n V i s i b i l i t y M o d e ( I c o n A l w a y s V i s i b l e ) //Инициализация
{
mIconLabel = new QLabel ( t h i s ) ; //Создаём метку для того, чтобы показать пиктограмму
//Обработка изменения текста в поле
c o n n e c t ( this , SIGNAL( textChanged ( QString ) ) , this , SLOT( slotTextChanged (
Q S t r i n g ) ) , Qt : : UniqueConnection ) ;
}
Чтобы использовать наш виджет в программе, добавим файл описания класса
и создадим несколько экземпляров, которые разместим на форме. Ответствен-
ным за создание интерфейса окна будет отдельный метод createUi().
В файле описания класса главного окна напишем:
#include c l a s s I c o n i z e d L i n e E d i t ;
c l a s s MainWindow : public QWidget
Программирование на языке С++ в среде Qt Creator