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