Wiki

Поля на формах

by Mark Summerfield

Очень часто, формы, которые имеют множество строк, используют следующее расположение – метки в первой колонке, и редактируемые строки во второй. Это отлично смотрится, за исключением того, что эти поля могут принять в себя лишь малый объем текста (1 – 2 символа), в то время как другие поля, одинаковые по длине – могут принять в себя длинную строку текста. Это делает таблицы несимпатичными. В этой статье мы попробуем разобраться, как этого избежать.

Нам будет необходим QLineEdit субкласс, который позволит нам устанавливать минимальное и максимальное количество видимых символов в редакторе строк.

class FixedLineEdit : public QLineEdit
{
    Q_OBJECT
    Q_PROPERTY(int minVisibleChars READ minVisibleChars WRITE setMinVisibleChars)
    Q_PROPERTY(int maxVisibleChars READ maxVisibleChars WRITE setMaxVisibleChars)
 
public:
    FixedLineEdit( QWidget *parent, const char *name = 0)
                 : QLineEdit(parent, name)
    {}
 
    int minVisibleChars() const { return minVisible; }         
    int maxVisibleChars() const { return maxVisible; }
    void setMinVisibleChars(int count)
    {
        minVisible = count;
        setMinimumWidth(fontMetrics().width('W') * minVisible +
                       ((style().defaultFrameWidth() + 2) * 2));
    }
 
    void setMaxVisibleChars(int count)
    {
        maxVisible = count;
        setMaximumWidth(fontMetrics().width('W') * maxVisible +
                       ((style().defaultFrameWidth() + 2) * 2));
    }
 
private:
    int minVisible;
    int maxVisible;
};

Этот класс определен в заголовке файла fixedlineedit.h. Он должен включать в себя как , так и файлы заголовков. Джейк использовал букву «W» как основу своих расчетов. Это означает, что FixedLineEdit с минимальным параметром видимых символов должен быть таким, чтобы он умел показать 2 буквы W.

Итак, у нас есть субкласс, давайте продолжать выполнять задачу при помощи Qt Designer. Возьмем легкий и простой "Custom Widget". Да, это приближение, но во всяком случае это лучше, чем писать свой плагин. Запускаем Qt Designer и кликаем на "Tools|Custom|Edit Custom Widgets" меню. Выбираем кнопку New Widger, и изменяем имя класса на "FixedLineEdit". Далее кликаем на … (3 точки) для того, чтобы запустить файловый обозреватель, в котором необходимо выбрать файл fixedlineedit.h. Изменим размеры на 100 (ширина) и 25 (высота). Убедитесь, что флаг Container Widget не выбран. А сейчас нажмем на Properties и добавим 2 новых свойства maxVisibleChars и minVisibleChars (оба целочисленного типа). Нажимаем на Close – и, готово.

FixedLineEdit теперь появится в "Custom Widgets" части тулбокса. Вы можете изменять подобным образом любой другой виджет, и устанавливать пропорции вдобавок к тем, что уже существуют (были созданы при помощи QLineEdit). 

Скриншот ниже использует QLineEdits, а следующий скриншот - использует FixedLineEdits. Обе формы используют одинаковое расположение решетки для их меток и редактируемых полей.

Qlineedit

Основанные на QLineEdit поля ввода строк расширяются либо сжимаются при изменении размеров формы до максимально возможных размеров.

Fixedlineedit

Основанные на FixedLineEdit поля ввода получили предельные значения количества вводимых символов, например 30--40 для имени (Name), 1--1 для пола (Sex), 10--15 для города (City), и 2--2 для штата (State). FixedLineEdits увеличит размер при растяжении формы до значения maxVisibleChars. Соответственно размер уменьшится при сужении формы до значения minVisibleChars.


Copyright © 2003 Trolltech Trademarks