一、描述
QGraphicsTextItem 使用文本的格式化大小和关联的字体来提供 boundingRect()、shape() 和 contains() 的合理实现。如果只需要在图形项中显示纯文本,请考虑改用 QGraphicsSimpleTextItem。
二、属性成员
1、openExternalLinks : bool
QGraphicsTextItem 是否应该使用 QDesktopServices::openUrl() 自动打开链接而不是发出 linkActivated() 信号。默认值为false。
2、textCursor : QTextCursor
文本光标。
三、实用成员函数
1、[信号] void linkActivated(const QString &link)
点击文本图形项上的链接时,会发出此信号。link 是被点击的链接。注:必须启用setTextInteractionFlags(Qt::TextBrowserInteraction);才会发此信号。
item = new QGraphicsTextItem;
item->setHtml("<a href=\"www.baidu.com\">网址</a>");
gphs->addItem(item);
item->setTextInteractionFlags(Qt::TextBrowserInteraction);
connect(item,&QGraphicsTextItem::linkActivated,[](const QString & url)
{
QDesktopServices::openUrl(QUrl(url));
});
2、[信号] void linkHovered(const QString &link)
鼠标悬停在文本项上的链接上时,会发出此信号。link 是被悬停的链接。注:必须启用setTextInteractionFlags(Qt::TextBrowserInteraction);才会发此信号
3、void setDefaultTextColor(const QColor &col)
设置默认文本颜色。
4、void setHtml(const QString &text)
设置 HTML 格式文本。如果图形项具有键盘输入焦点,此函数还将调用 ensureVisible() 以确保文本在所有视口中可见。
5、void setPlainText(const QString &text)
设置纯文本。如果图形项具有键盘输入焦点,此函数还将调用 ensureVisible() 以确保文本在所有视口中可见。
6、void setTextInteractionFlags(Qt::TextInteractionFlags flags)
设置图形项对用户输入的反应。
Qt::TextInteractionFlag
- Qt::NoTextInteraction:不与文本交互。
- Qt::TextSelectableByMouse:可以使用鼠标选择文本并使用上下文菜单或快捷键将文本复制到剪贴板。
- Qt::TextSelectableByKeyboard:可以使用键盘上的光标键选择文本。显示文本光标。
- Qt::LinksAccessibleByMouse:可以用鼠标突出显示和激活链接。
- Qt::LinksAccessibleByKeyboard:链接可以使用 tab 聚焦并使用 enter 激活。
- Qt::TextEditable:文本可编辑。
- Qt::TextEditorInteraction:文本编辑器的默认设置。(TextSelectableByMouse | TextSelectableByKeyboard | TextEditable)
- Qt::TextBrowserInteraction:QTextBrowser 的默认设置。(TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard)
7、void setTextWidth(qreal width)
设置图形项文本的首选宽度。 如果实际文本比指定的宽度宽,那么它将被分成多行。如果宽度设置为 -1,则文本不会分成多行,除非通过显式换行符或新段落强制执行。默认值为 -1。
QGraphicsTextItem *item = new QGraphicsTextItem;
item->setPlainText("黄河之水天上来,奔流到海不复回");
item->setTextWidth(140);
gphs->addItem(item);
四、一个例子:文本靠右对齐
QGraphicsTextItem *item = new QGraphicsTextItem;
auto document = item->document();
auto option = document->defaultTextOption();
option.setAlignment(Qt::AlignRight | Qt::AlignVCenter);
document->setDefaultTextOption(option);
item->setPlainText("this is the first line\nthis is the second line\nthis is the third line");
item->setTextWidth(110);
gphs->addItem(item);