2016-06-24 2 views
0

Мне нужно реализовать такой класс, как QGraphcisTextItem, но мне нужно, чтобы он был выбираемым текстом.Как нарисовать выбранный текст с помощью QPainter?

Однако, если мой класс спускается из QGraphicsTextItem или QGraphicsItem, и я переопределяю событие рисования, возможность удаления текста может быть потеряна (я использую drawText).

Итак, мой вопрос в том, как я могу создать текст с возможностью выбора с помощью drawText из QPainter?

+0

Вы можете нарисовать фон текста с различным цветом, где вы хотите, чтобы ваш выбор будет. Цвет может быть выбран из QPalette. –

+2

Кстати, ваш вопрос звучит странно. Вы понимаете разницу между рисованием и взаимодействием с пользователем? Какова ваша конкретная проблема? Вы проводили какие-либо исследования? –

+0

Я действительно понимаю разницу. Когда вы используете QGraphicsTextItem, вы можете выбрать текст и затем скопировать его. У вас есть определенная функция для этого имени setTextSelectable. Он даже позволяет всплывающее меню для копирования. Мне нужна такая же функциональность в графическом текстовом элементе, который я хочу реализовать сам. Я не могу использовать QGraphcisTextItem, потому что хочу, чтобы у моего элемента были разные шрифты. Единственный способ, который я могу придумать для этого, - иметь несколько текстовых элементов, но я не думаю, что это путь. – aarelovich

ответ

0

Я не могу воспроизвести проблему с пользовательскими шрифтами. Это очень важный бит информации, который принадлежит к вопросу, и меняет вопрос по существу.

addApplicationFont - статическая функция, которая добавляет шрифт к базе данных шрифтов приложения. Используйте applicationFontFamilies(int id), чтобы получить имя семейства для использования в HTML:

... 
auto id = QFontDatabase::addApplicationFont(":/fonts/myfont.ttf"); 
if (if == -1) 
    return; 
auto families = QFontDatabase::applicationFontFamilies(id); 
if (families.isEmpty()) 
    return; 
auto face = families.first().toHtmlEscaped(); 
auto html = QStringLiteral("<font face=\"%1\">Hello</font>").arg(face); 
... 
+0

Извините. После того, как вы сказали, чтобы попробовать это, я попробовал, и он работал, и забыл проверить. Большое спасибо. Я не собирался это делать, пока не сделал то, что вы показали здесь, и это сработало до моего неверия. Я думал, что HTML-теги имеют очень ограниченное подмножество шрифтов, с которыми они могли бы работать. – aarelovich

+0

@aarelovich Я рад, что это сработало для вас :) –

Смежные вопросы