QT 4: программирование GUI на С++ | страница 20



даже если вы не планируете в настоящий момент переводить ваше приложение на какой-нибудь другой язык. Перевод приложений Qt на другие языки рассматривается в главе 17.

Мы используем знак амперсанда ('&') для задания клавиш быстрого доступа. Например, в строке 11 создается кнопка Find, которая может быть активирована нажатием пользователем сочетания клавиш Alt+F на платформах, поддерживающих клавиши быстрого доступа. Амперсанды могут также применяться для управления фокусом: в строке 6 мы создаем текстовую метку с клавишей быстрого доступа (Alt+W), а в строке 8 мы устанавливаем строку редактирования в качестве «партнера» этой текстовой метки. Партнером (buddy) называется виджет, на который передается фокус при нажатии клавиши быстрого доступа текстовой метки. Поэтому при нажатии пользователем сочетания клавиш Alt+W (клавиша быстрого доступа текстовой метки) фокус переходит на строку редактирования (которая является партнером текстовой метки).

В строке 12 мы делаем кнопку Find используемой по умолчанию, вызывая функцию setDefault(true)[3]. Кнопка, для которой задан режим использования по умолчанию, будет срабатывать при нажатии пользователем клавиши Enter (ввод). В строке 13 мы устанавливаем кнопку Find в неактивный режим. В неактивном режиме виджет обычно имеет серый цвет и не реагирует на действия пользователя.

>15 connect(lineEdit, SIGNAL(textChanged(const QString &)),

>16 this, SLOT(enableFindButton(const QString &)));

>17 connect(findButton, SIGNAL(clicked()),

>18 this, SLOT(findClicked()));

>19 connect(closeButton, SIGNAL(clicked()),

>20 this, SLOT(close()));

Закрытый слот enableFindButton(const QString &) вызывается при всяком изменении значения в строке редактирования. Закрытый слот findClicked() вызывается при нажатии пользователем кнопки Find. Само диалоговое окно закрывается при нажатии пользователем кнопки Close (закрыть). Слот close() наследуется от класса QWidget, и по умолчанию он делает виджет невидимым (но не удаляет его). Программный код слотов enableFindButton() и findClicked() мы рассмотрим позднее.

Поскольку QObject является одним из прародителей FindDialog, мы можем не указывать префикс QObject:: перед вызовами connect().

>21 QHBoxLayout *topLeftLayout = new QHBoxLayout;

>22 topLeftLayout->addWidget(label);

>23 topLeftLayout->addWidget(lineEdit);

>24 QVBoxLayout *leftLayout = new QVBoxLayout;

>25 leftLayout->addLayout(topLeftLayout);