Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Qt之图形视图(QGraphicsTextItem - 文本项)

$
0
0

简述

QGraphicsTextItem 类提供了一个文本项,可以添加到 QGraphicsScene 显示格式化的文本。

如果只需要在项目中显示纯文本,可以考虑使用 QGraphicsSimpleTextItem。

详细说明

QGraphicsTextItem 使用文本的格式化大小和相关联的字体提供了一个合理的实现 boundingRect()、shape() 和 contains()。可以通过调用 setFont() 设置字体。

项目的首选文本宽度可以使用 setTextWidth() 设置,并使用 textWidth() 获取。

注意:为了在中心对齐 HTML 文本,必须设置项目的文本宽度。否则,可以在设置项目的文本后调用 adjustSize()。

注意: QGraphicsTextItem 默认接受 hover 事件,可以使用 setAcceptHoverEvents() 更改此值。

纯文本

这里写图片描述

首先,通过调用 QGraphicsTextItem 的构造函数创建一个文本项(也可使用 QGraphicsScene 的 addText() 函数创建,并将文本项添加至场景中)。要设置项目的文本,传递 QString 至 QGraphicsTextItem 的构造函数,或调用 setPlainText()。

setDefaultTextColor() 如果要设置文本项的字体,通过调用 setFont() 设置。

// 定义一个文本项
QGraphicsTextItem *pItem = new QGraphicsTextItem();
pItem->setPlainText(QString::fromLocal8Bit("一去丶二三里"));
pItem->setDefaultTextColor(QColor(0, 160, 230));  // 文本色

// 字体
QFont font = pItem->font();
font.setPixelSize(20);  // 像素大小
font.setItalic(true);  // 斜体
font.setUnderline(true);  // 下划线
pItem->setFont(font);

// 将文本项添加至场景中
QGraphicsScene *pScene = new QGraphicsScene();
pScene->addItem(pItem);

// 为视图设置场景
QGraphicsView *pView = new QGraphicsView();
pView->setScene(pScene);
pView->setStyleSheet("border:none; background:transparent;");

pView->show();

富文本

假设文本是 HTML 格式,显示不同颜色的文本以及图片。

这里写图片描述

QString strHTML = QString("<html> \
                               <head> \
                               <style> \
                               font{color:white;} #f{font-size:18px; color: #00A0E6;} \
                               </style> \
                               </head> \
                               <body>\
                               <font>%1</font><font id=\"f\">%2</font> \
                               <br/><br/> \
                               <img src=\":/Images/logo\" width=\"100\" height=\"100\"> \
                               </body> \
                               </html>").arg("I am a ").arg("Qter");
pItem->setHtml(strHTML);

超链接

我们需要简单使用标签 <a></a>写一段简单的 HTML 超链接代码

方式一:

比较简单,直接调用 setOpenExternalLinks(true) 即可。

pItem->setHtml(QString("<a href = \"%1\">%2</a>").arg("http://blog.csdn.net/liang19890820").arg(QStringLiteral("一去丶二三里")));
pItem->setOpenExternalLinks(true);
pItem->setTextInteractionFlags(Qt::TextBrowserInteraction);

方式二:

连接 linkActivated() 信号,然后调用 QDesktopServices 的 openUrl() 打开链接:

pItem->setHtml(QString("<a href = \"%1\">%2</a>").arg("http://blog.csdn.net/liang19890820").arg(QStringLiteral("一去丶二三里")));
pItem->setTextInteractionFlags(Qt::TextBrowserInteraction);
connect(pItem, &QGraphicsTextItem::linkActivated, [=](QString link) {
            QDesktopServices::openUrl(QUrl(link));
});

注意:这两种方式都需要调用 setTextInteractionFlags(Qt::TextBrowserInteraction),指定交互方式为文本浏览器交互。

编辑

通过使用 setTextInteractionFlags() 设置 Qt::TextEditorInteraction 标志来使项目可编辑。

这里写图片描述

pItem->setTextInteractionFlags(Qt::TextEditorInteraction);  // 可编辑
connect(pItem->document(), &QTextDocument::contentsChanged, [=]() {
    qDebug() << pItem->toPlainText();
});

输出如下:

“Q”
“Qt”
“Qte”
“Qter”

作者:u011012932 发表于2016/11/4 18:12:00 原文链接
阅读:73 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>