На этом шаге рассмотрим отображение строки с разрывом.
Бывает, что область, предназначенная для показа текста, не может отобразить весь текст целиком. Подобные ситуации часто наблюдаются, например, при отображении путей каталогов. В данном случае можно сделать разрыв в тексте, заполнив его точками, и тем самым показать, что отображенный текст не является полным. Эту возможность можно реализовать на базе метода 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 указывают, в каком месте должен быть показан разрыв.
0x0000 | Разрыв должен быть показан в тексте в начале | |
0x0001 | Разрыв должен быть показан в тексте справа | |
0x0002 | Разрыв должен быть показан в тексте в середине | |
0x0003 | Разрыв появляться в тексте не должен |
На следующем шаге рассмотрим классы графического представления.