文章目录
QGraphicsTextItem 类
QGraphicsTextItem类提供了一个文本项,您可以将其添加到QGraphicsScene中以显示格式化的文本。
Header: | #include < QGraphicsTextItem > |
---|---|
qmake: | QT += widgets |
Inherits: | QGraphicsObject |
Inherited By: | |
Since: | Qt 4.2 |
详述
如果只需要在项目中显示纯文本,请考虑改用QGraphicsSimpleTextItem。
要设置项目的文本,请将QString传递给QGraphicsTextItem的构造函数,或调用setHtml() / setPlainText() 。
QGraphicsTextItem使用文本的格式化大小和关联的字体来提供boundingRect() ,shape() 和contains() 的合理实现。 您可以通过调用setFont() 来设置字体。
通过使用setTextInteractionFlags() 设置Qt::TextEditorInteraction标志,可以使该项目可编辑。
可以使用setTextWidth() 设置项目的首选文本宽度,并使用textWidth() 获得该宽度。
注意:为了使HTML文本居中对齐,必须设置项目的文本宽度。 否则,可以在设置项目的文本后调用adjustSize() 。
注意:默认情况下,QGraphicsTextItem接受悬停事件。 您可以使用setAcceptHoverEvents() 更改此设置。
另请参见QGraphicsSimpleTextItem,QGraphicsPathItem,QGraphicsRectItem,QGraphicsEllipseItem,QGraphicsPixmapItem,QGraphicsPolygonItem,QGraphicsLineItem和Graphics View Framework。
公共类型
enum anonymous
由virtual type()函数返回的值。
Constant | Value | Description |
---|---|---|
QGraphicsTextItem::Type | 8 | 图形文本项 |
属性
openExternalLinks : bool
指定QGraphicsTextItem是否应该使用QDesktopServices::openUrl() 自动打开链接,而不是发出linkActivated信号。
默认值为false。
Access functions:
- bool openExternalLinks() const
- void setOpenExternalLinks(bool open)
textCursor : QTextCursor
此属性表示可编辑文本项中的可见文本光标。
默认情况下,如果尚未设置项目的文本,则此属性包含一个空文本光标; 否则,它包含一个放在项目文档开头的文本光标。
Access functions:
- QTextCursor textCursor() const
- void setTextCursor(const QTextCursor &cursor)
公共函数
构造函数
- QGraphicsTextItem(const QString &text, QGraphicsItem *parent = nullptr)
- QGraphicsTextItem(QGraphicsItem *parent = nullptr)
- virtual ~QGraphicsTextItem()
属性相关
- bool openExternalLinks() const
void setOpenExternalLinks(bool open) - QTextCursor textCursor() const
void setTextCursor(const QTextCursor &cursor)
其它函数
- void adjustSize()
- QColor defaultTextColor() const
void setDefaultTextColor(const QColor &col) - qreal textWidth() const
void setTextWidth(qreal width) - QFont font() const
void setFont(const QFont &font) - QString toHtml() const
void setHtml(const QString &text) - QString toPlainText() const
void setPlainText(const QString &text) - QTextDocument * document() const
void setDocument(QTextDocument *document)
交互
- bool tabChangesFocus() const
void setTabChangesFocus(bool b) - Qt::TextInteractionFlags textInteractionFlags() const
void setTextInteractionFlags(Qt::TextInteractionFlags flags) 设置flags标志以指定文本项应如何响应用户输入
QGraphicsTextItem的默认值为Qt::NoTextInteraction。 如果标志与Qt::NoTextInteraction不同,则通过设置它来影响ItemIsFocusable QGraphicsItem标志,否则将其清除。
默认情况下,文本为只读。 要将项目转换为编辑器,请设置Qt::TextEditable标志。
enum Qt::TextInteractionFlag
flags Qt::TextInteractionFlags该枚举指定文本显示窗口小部件如何响应用户输入。
Constant Value Description NoTextInteraction 0 无法与文字互动。 TextSelectableByMouse 1 可以使用鼠标选择文本,然后使用上下文菜单或标准键盘快捷键将其复制到剪贴板。 TextSelectableByKeyboard 2 可以使用键盘上的光标键选择文本。 显示一个文本光标。 LinksAccessibleByMouse 4 链接可以用鼠标突出显示并激活。 LinksAccessibleByKeyboard 8 可以使用Tab突出显示链接,然后按Enter激活。 TextEditable 16 文本是完全可编辑的。 TextEditorInteraction TextSelectableByMouse | TextSelectableByKeyboard | TextEditable 文本编辑器的默认值。 TextBrowserInteraction TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard QTextBrowser的默认值。
重写的公共函数
- virtual QRectF boundingRect() const override
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override
- virtual int type() const override enum { Type = 13 };
演示代码
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationName ("图形框架");
QGraphicsView view;
int x = -200,y = -200;
int w = 400,h=400;
QGraphicsScene scene(x,y,w,h);
scene.setBackgroundBrush (QBrush(qRgb (173,241,174)));
auto *gi = new QGraphicsTextItem;
gi->setFlag (QGraphicsItem::ItemIsMovable);
QFont font = qApp->font ();
font.setFamily ("Arial");
font.setPixelSize (20);
gi->setHtml ("<table border='1'>"
" <tr>"
" <td>row 1, cell 1</td>"
" <td>row 1, cell 2</td>"
" </tr>"
" <tr>"
" <td>row 2, cell 1</td>"
" <td>row 2, cell 2</td>"
" </tr>"
"</table>");
gi->setFont (font);
gi->setTextInteractionFlags (Qt::TextEditorInteraction);
gi->moveBy (x,y);
scene.addItem (gi);
view.setScene (&scene);
view.setRenderHint (QPainter::Antialiasing);
view.setWindowFlag (Qt::WindowMinMaxButtonsHint,false);
view.show ();
return a.exec();
}