Шаг 227.
Библиотека Qt.
Отображение строки с разрывом

    На этом шаге рассмотрим отображение строки с разрывом.

    Бывает, что область, предназначенная для показа текста, не может отобразить весь текст целиком. Подобные ситуации часто наблюдаются, например, при отображении путей каталогов. В данном случае можно сделать разрыв в тексте, заполнив его точками, и тем самым показать, что отображенный текст не является полным. Эту возможность можно реализовать на базе метода elidedText() класса QFontMetrics. На рис. 1 показано окно с текстом, при изменении размеров которого, в случае невозможности размещения текста целиком, будет показан разрыв в середине текста, заполненный точками.


Рис.1. Текст с разрывом

class ElidedText : public QWidget {
protected:
    virtual void paintEvent(QPaintEvent*)
    {
        //создаем строку с длинным текстом (объект str)
        QString  str = "Бывает, что область, предназначенная для показа
                        текста, не может отобразить весь текст целиком.";
        /*строку str вместе с двумя другими параметрами передаем
        в метод elideText(), т. е. передаем режим показа разрыва в середине
        Qt::ElideMiddle и текущую ширину виджета. Этот метод возвращает текст
        новой строки strElided*/
        QString  strElided = fontMetrics().elidedText(str, Qt::ElideMiddle, width());
        QPainter painter(this);
        painter.setFont(QFont("Comic Sans MS", 12, QFont::Normal));
        //текст отображаем при помощи метода drawText()
        painter.drawText(rect(), strElided);
    }

public:
    ElidedText(QWidget* pwgt = 0) : QWidget(pwgt)
    {
    }
};

    Файлы приложения можно взять здесь.

    Значения в табл. 1 указывают, в каком месте должен быть показан разрыв.

Таблица 1. Перечисления языка Си TextElideMode пространства имен Qt
Константа
Значение
Описание
ElideLeft
0x0000 Разрыв должен быть показан в тексте в начале
ElideRight
0x0001 Разрыв должен быть показан в тексте справа
ElideMiddle
0x0002 Разрыв должен быть показан в тексте в середине
ElideNone
0x0003 Разрыв появляться в тексте не должен

    На следующем шаге рассмотрим классы графического представления.




Предыдущий шаг Содержание Следующий шаг