Как обернуть некоторый текст в прямоугольник в QML?
4352 просмотра
2 ответа
Я должен выполнить очень простую задачу: я хочу отобразить фрагмент текста внутри прямоугольника, и размер этого прямоугольника должен быть точно шириной текста.
В C ++ это довольно легко сделать. Просто определите QString и примените QFontMetrics, чтобы получить его ширину. Затем определите прямоугольный графический элемент с таким размером. Это делается в течение пяти минут.
Я слышал, что QML проще в использовании. Поэтому я ожидал решить эту проблему менее чем за пять минут. Я этого не сделал, и я все еще придерживаюсь этого. Вот что я пробовал:
Rectangle {
width: myText.contentWidth
height: myText.contentHeight
Text {
anchors.fill:parent
id: myText
font.family: "Helvetica"
font.pointSize: 50
text: qsTr("The string I want to display")
}
}
Это не работает по какой-то причине, я не понимаю. Я нашел способ сделать это таким образом, который точно не соответствует моим потребностям:
Rectangle {
width: 100
height: 100
MouseArea {
id: myMouseArea
anchors.fill: parent
onClicked: parent.width=myText.contentWidth
hoverEnabled: true
}
Text {
anchors.fill:parent
id: myText
font.family: "Helvetica"
font.pointSize: 50
text: qsTr("The string I want to display")
}
}
В этом случае, когда я нажимаю на прямоугольник, он получает правильную ширину. Тем не менее, меня это не интересует, потому что я не хочу, чтобы нажимал, чтобы получить прямоугольник с правильным размером. Я хочу, чтобы размер прямоугольника получал правильный размер, когда myText меняет текст. Использование onTextChanged в элементе Text также не работает.
Что мне здесь не хватает?
Спасибо за вашу помощь ...
Автор: Laurent Michel Источник Размещён: 17.05.2019 04:01Ответы (2)
3 плюса
Насколько мне известно, метрики шрифтов были доступны разработчикам в Qt 5.4, поэтому они были относительно новыми в QML. У вас есть в основном FontMetrics
и TextMetrics
. Простой пример использования:
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
visible: true
width: 280; height: 150
TextMetrics {
id: textMetrics
font.family: "Arial"
font.pixelSize: 50
text: "Hello World"
}
Rectangle {
width: textMetrics.width
height: textMetrics.height
color: "steelblue"
Text {
text: textMetrics.text
font: textMetrics.font
}
}
}
Как было отмечено Phrogz
в TextMetrics
типе не поддерживает измерения выделенного текста.
0 плюса
Я уверен, что компонент Label выполнит эту задачу:
import QtQuick 2.1
import QtQuick.Controls 2.4
ApplicationWindow {
visible: true
Column {
Repeater {
model: [
{"color": "red", "radius": 1},
{"color": "green", "radius": 2},
{"color": "blue", "radius": 3}
]
Label {
padding: 0
text: modelData.color
font.family: "Helvetica"
font.pointSize: 50
background: Rectangle {
color: modelData.color
radius: modelData.radius
}
}
}
}
}
Автор: Senyai
Размещён: 17.10.2018 04:59
Вопросы из категории :
- text Как мне продублировать целую строку в Emacs?
- text Как изменить текстовый файл?
- text Быстрая команда Unix для отображения определенных строк в середине файла?
- text Поиск отмеченного (выделенного) текста в Emacs
- text Извлечение текста из файла HTML с использованием Python
- text Получить последние 10 строк очень большого текстового файла> 10 ГБ
- qml Указание шрифта для многих Text-элементов в Qt QML
- qml Сигнал C ++ в QML-слот в Qt
- qml QML градиенты с ориентацией
- qml Модуль QML не найден
- qml Exe-файл не запускается без QtCreator
- qml declare global property in QML for other QML files
- wrap Как настроить ckeditor, чтобы не переносить содержимое в блок <p>?
- wrap Алгоритм рекурсивного Word Wrap
- wrap Запретить перенос встроенного блока, но разрешить перенос содержимого
- wrap CSS вертикальный центр по кругу
- wrap Почему фильтр the_title () также применяется в заголовке меню?
- wrap Как обернуть и выровнять комментарии в коде Python