grid->addWidget(username_entry, 0, 1, 0);
grid->addWidget(password_entry, 1, 1, 0);
QPushButton *button = new QPushButton("Ok", widget, "button");
grid->addWidget(button, 2, 1, Qt::AlignRight);
resize(350, 200);
connect(button, SIGNAL(clicked()), this, SLOT(Clicked()));
}
void LineEdit::Clicked(void) {
std::cout << password_entry->text() << "\n";
}
int main(int argc, char **argv) {
QApplication app(argc, argv);
LineEdit *window = new LineEdit();
app.setMainWidget(window);
window->show();
return app.exec();
}
Выполнив эту программу, вы должны получить результат, показанный на рис. 17.5.
Рис. 17.5
Как это работает
Вы создали два виджета
QLineEdit
, один подготовили для ввода пароля, задав
EchoMode
, и заставили его выводить содержимое при щелчке мышью кнопки
PushButton
. Обратите внимание на виджет
QGridLayout
, который очень полезен для размещения виджетов в табличной сетке. Когда виджет вставляется в сетку таблицы, вы передаете номер строки и столбца, нумерация начинается с 0, нулевые номера строки и столбца у верхней левой ячейки.
Кнопки Qt
Кнопки виджетов вездесущи и мало отличаются внешним видом, способом применения и API в разных комплектах инструментов. Неудивительно, что Qt предлагает стандартные кнопки
PushButton
, флажки
CheckBox
и радиокнопки (или зависимые переключатели)
RadioButton
.
QButton: базовый класс кнопок
Все виджеты кнопок в комплекте Qt — потомки абстрактного класса
QButton
. У этого класса есть методы для опроса и переключения включенного/выключенного состояния кнопки и задания текста кнопки или ее графического представления.
Вам никогда не придется обрабатывать виджет типа
QButton
(не путайте с виджетом
QPushButton
!), поэтому нет смысла приводить конструкторы. Далее перечислено несколько полезных функций-методов этого класса:
<b>#include <qbutton.h></b>
<b>virtual void QButton::setText(const QString&);</b>
<b>virtual void QButton::setPixmap(const QPixmap&);</b>
<b>bool QButton::isToggleButton() const;</b>
<b>virtual void QButton::setDown(bool);</b>
<b>bool QButton::isDown() const;</b>
<b>bool QButton::isOn() const;</b>
<b>enum QButton::ToggleState { Off, NoChange, On }</b>
<b>ToggleState QButton::state() const;</b>
У функций
isDown
и
isOn
одно назначение. Обе они возвращают
TRUE
, если кнопка была нажата или активизирована.
Часто вам нужно отключить или сделать серым вариант, если он недоступен в данный момент. Сделать недоступным любой виджет, включая QButton, можно с помощью вызова метода
QWidget::setEnable(FALSE)
.
У
QButton
есть три подкласса, заслуживающие внимания:
□
QPushButton
— виджет простой кнопки, выполняющий некоторое действие при щелчке кнопкой мыши;
□
QCheckBox
— виджет кнопки, способный изменять состояние с включенного на выключенное для обозначения некоторого выбора;
□
QRadioButton
— виджет кнопки, обычно применяемый в группе таких же кнопок, только одна из которых может быть активна в любой момент времени.
QPushButton
QPushButton
— стандартная кнопка общего вида, содержащая текст, такой как "OK" или "Cancel" и/или пиксельную пиктограмму. Как все кнопки класса
QButton
, она порождает при активизации сигнал
clicked
и обычно используется для связи со слотом и выполнения некоторого действия.
Вы уже применяли кнопку
QPushButton
в примерах, и есть лишь еще одна интересная деталь, касающаяся этого простейшего из виджетов Qt. Кнопку
QPushButton
можно превратить из кнопки, не помнящей своего состояния, в кнопку-выключатель (т.е. способную быть включенной и выключенной), вызвав метод
setToggleButton
. (Если помните, у комплекта GTK+ из предыдущей главы есть для этих целей разные виджеты.)
Далее для полноты описания приведены конструкторы и полезные методы.
<b>#include <qpushbutton.h></b>
<b>QPushButton(QWidget *parent, const char *name = 0);</b>
<b>QPushButton(const QString& text, QWidget *parent, const char *name = 0);</b>
<b>QPushButton(const QIconSet& icon, const QString& text,</b>
<b> QWidget *parent, const char * name = 0);</b>
<b>void QPushButton::setToggleButton(bool);</b>
QCheckBox
QCheckBox
— это кнопка, у которой есть состояние, ее можно включить и выключить (или установить и сбросить). Внешний вид
QCheckBox
зависит от стиля отображения окон текущей системы (Motif, Windows и т.д.), но обычно она отображается как флажок с сопроводительным текстом справа.
Вы можете также перевести кнопку
QCheckBox
в третье промежуточное состояние, которое означает "без изменения". Оно бывает полезно в редких случаях, когда вы не можете прочесть состояние выбора, который предоставляет кнопка
QCheckBox
(и, следовательно, самостоятельно установить или сбросить флажок), но хотите дать пользователю возможность оставить выбор неизменным наряду с установкой и сбросом.