Литмир - Электронная Библиотека
Содержание  
A
A

<b>QBoxLayout::addLayout(QLayout *layout, int stretch = 0);</b>

Выполните упражнение 17.3.

Упражнение 17.3. Применение классов
QBoxLayout

В этом примере вы увидите в действии классы

QBoxLayout
при размещении виджетов
QLabel
в окне
QMainWindow
.

1. Сначала введите заголовочный файл LayoutWindow.h:

#include &lt;qmainwindow.h&gt;

class LayoutWindow : public QMainWindow {

 QOBJECT

public:

 LayoutWindow(QWidget *parent = 0, const char *name = 0);

virtual ~LayoutWindow();

};

2. Теперь введите реализацию в файл LayoutWindow.cpp:

#include &lt;qapplication.h&gt;

#include &lt;qlabel.h&gt;

#include &lt;qlayout.h&gt;

#include &quot;LayoutWindow.moc&quot;

LayoutWindow::LayoutWindow(QWidget* parent, const char *name) :

 QMainWindow(parent, name) {

 this-&gt;setCaption(&quot;Layouts&quot;);

3. Необходимо создать фиктивный

QWidget
для хранения объекта
QHBoxLayout
, поскольку его нельзя напрямую вставить в объект
QMainWindow
:

 QWidget *widget = new QWidget(this);

 setCentralWidget(widget);

 QHBoxLayout *horizontal = new QHBoxLayout(widget, 5, 10, &quot;horizontal&quot;);

 QVBoxLayout *vertical = new QVBoxLayout();

 QLabel* label1 = new QLabel(&quot;Top&quot;, widget, &quot;textLabel1&quot;);

 QLabel* label2 = new QLabel(&quot;Bottom&quot;, widget, &quot;textLabel2&quot;);

 QLabel* label3 = new QLabel(&quot;Right&quot;, widget, &quot;textLabel3&quot;);

 vertical-&gt;addwidget(label1);

 vertical-&gt;addwidget(label2);

 horizontal-&gt;addLayout(vertical);

 horizontal-&gt;addWidget(label3);

 resize(150, 100);

}

LayoutWindow::~LayoutWindow() { }

int main(int argc, char **argv) {

 QApplication app(argc, argv);

 LayoutWindow *window = new LayoutWindow();

 app.setMainWidget(window);

 window-&gt;show();

 return app.exec();

}

Как и прежде, перед компиляцией нужно выполнить

moc
для заголовочного файла:

$ <b>moc LayoutWindow.h -о LayoutWindow.moc</b>

$ <b>g++ -о layout LayoutWindow.cpp -I$QTDIR/include -L$QTDIR/lib -lqui</b>

Выполнив эту программу, вы получите схему размещения ваших меток QLabel (рис. 17.4). Попробуйте изменить величину окна и посмотрите, как расширяются и сжимаются метки, заполняя все доступное пространство.

Основы программирования в Linux - image069.jpg

Рис. 17.4

Как это работает

Программа LayoutWindow.cpp создает два виджета упаковочных контейнеров, горизонтальный и вертикальный контейнер для размещения виджетов. Вертикальный контейнер получает две метки, описанные, соответственно, как

Top
и
Bottom
. Горизонтальный контейнер также содержит два виджета, метку, обозначенную
Right
, и вертикальный контейнер. Вы можете помещать компоновочные виджеты внутрь других компоновочных виджетов, как показано в данном примере.

Попробуйте изменить исходный текст программы в файле LayoutWindow.срр, чтобы поэкспериментировать и лучше понять, как работают компоновочные виджеты.

Мы рассмотрели основы применения Qt — сигналы и слоты, команду moc и средства компоновки. Теперь пора более внимательно изучить виджеты.

Виджеты Qt

Для каждого случая в Qt есть виджеты, и их подробное рассмотрение займет всю оставшуюся часть книги. В этом разделе мы познакомимся с виджетами Qt общего применения, включая виджеты для ввода данных, кнопки, обычные и раскрывающиеся списки.

QLineEdit

QLineEdit
— виджет для ввода однострочного текста. Применяйте его для ввода коротких фрагментов текста, таких как имя пользователя. В виджете
QLineEdit
можно ограничить длину вводимого текста с помощью маски ввода, предлагающей заполнить шаблон, или для дополнительного контроля можно применить функцию проверки допустимости, например, чтобы убедиться в том, что пользователь вводит корректные дату, номер телефона или подобные величины. У виджета
QLineEdit
есть функции редактирования, позволяющие выбирать части текста, вырезать и вставлять, отменять и повторять изменения, как командами пользователя, так и средствами API.

Далее перечислены конструкторы и наиболее полезные методы.

<b>#include &lt;qlineedit.h&gt;</b>

<b>QLineEdit::QLineEdit(QWidget *parent, const char* name = 0);</b>

<b>QLineEdit::QLineEdit(const QString&amp; contents, QWidget *parent,</b>

<b> const char *name = 0);</b>

<b>QLineEdit::QLineEdit(const QString&amp; contents, const QString&amp; inputMask,</b>

<b> QWidget *parent, const char* name = 0);</b>

<b>void setInputMask(const QString&amp; inputMask);</b>

<b>void insert(const QString&amp; newText);</b>

<b>bool isModified(void);</b>

<b>void setMaxLength(int length);</b>

<b>void setReadOnly(bool read);</b>

304
{"b":"285844","o":1}