问题标签 [qgraphicstextitem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
194 浏览

qt - 如何让我的插入符号显示在 QGraphicsTextItem 上的第一次双击操作中?

我正在努力让一个QGraphicsTextItem作为用户友好的对象工作。
由于在可编辑时很难移动,我将其设置为不可编辑,并使其在双击时可编辑。然后在失去焦点时关闭编辑。

我的问题是,插入符号不会在第一次编辑时出现。
我尝试根据鼠标位置获取位置(如this试图解决不同问题的这个问题中),或调用QGraphicsTextItem::mouseDoubleClickEvent(event);

无论我尝试什么,插入符号在第一次操作时都是不可见的 - 直到我开始输入(或者如果我专注于然后重新输入) - 即使它位于正确的位置。

键入或取消选择并重新选择后,插入符号每次都会显示在正常位置。

我试图在项目构造函数中调用 QTextCursor,将其位置设置为 0,没有任何区别。

有什么不同:两种情况之一(我都不能做): a)在构造函数中
开始项目Qt::TextEditorInteraction
开始项目 b)没有移动/焦点/可选标志的开始项目

我也做不到——因为我的默认 item 状态必须是可移动的,这会干扰文本编辑(如开头所述)。
我试图在编辑过程中禁用这些标志......但没有效果。

这是一个简单的代码来演示这个问题,我希望有人能有一个想法。

mytextitem.h

mytextitem.cpp

主文件

我也考虑过编辑文本 - 不确定这是否可行,但我认为它会影响我必须尽快处理的撤消堆栈......

如何让我的插入符号出现在文本项的第一次双击操作中?

(作为用户,看不到插入符号会让我不确定我是否可以打字......即使它有效......如果我没有关于我的操作的反馈,我将不会对对象有信心。这就是我关心的原因这个问题。)

0 投票
1 回答
445 浏览

qt - QGraphicsTextItem的格式更改后如何继续文本编辑?

我正在尝试对QGraphicsTextItem可编辑的内容进行更改(字体更改)。
我正在尝试更改文本片段的格式,或在键入点应用的格式(如果我将文本设置为粗体,则在光标位置执行该操作后我键入的文本将是粗体)。

为文本片段设置格式有效 - 但我找不到将焦点正确返回到项目的方法。
我可以在正确的位置显示插入符号,但我不能在框中输入,除非我实际单击框(即使看起来我应该能够这样做)。

简单示例(由于某种原因,它在关闭程序时崩溃,但我不在乎,因为我正在测试文本类,而不是主程序):

头文件:mytextitem.h

mytextitem.cpp

主文件

只有单击框才能编辑项目。

假设我已经在框中(编辑),并且我按下“粗体”复选框,我希望能够继续编辑 - 在框中输入 - 但即使我尝试

  • 设置焦点(将闪烁的文本光标放在框中),
  • 为光标设置位置(我可以移动它,或者选择一些东西......这可行,但我想保持当前位置和选择)
  • 抓取键盘 - 似乎什么都不做

似乎什么都没有让我回到框中,所以我继续输入(使用新的字体设置)。

我怎样才能得到QTextCursor或其他任何东西让我继续编辑文本?

0 投票
1 回答
1207 浏览

qt - 读取富文本字符和块格式

我有使用实现的富文本项目QGraphicsTextItem

设置字体大小,例如:

更复杂的是读取字体大小。
假设我有一个选择,我必须遍历文档,遍历所有QTextBlock, QTextFragment,读取QTextCharFormat...
但是简单的选项,如果没有选择,只需读取光标处的字体大小:

这可行,但我发现了 3 个问题:

QGraphicsTextItem1)通过属性设置字体大小:

这通过我上面的函数返回 0 get。要设置整个项目的字体大小,我必须使用与函数中相同的方法set
该方法不应该setFont设置一个可以从QTextCursor?

2)setHtml可以设置格式 - 但我看不到任何读取格式的方法
如何从 html 片段中读取富文本格式?是唯一的可能性,解析 html 吗?

3)(我目前的绊脚石)
从外部源复制格式化的文本并粘贴QGraphicsTextItem似乎保持源的格式 - 但我怎样才能阅读该格式?
如果文本是从外部粘贴的,则上述get方法读取字体大小为 0。
font().pointSize()总是返回 8。(我没有设置它,所以我想这是默认值)
是否有另一种读取文本格式的方法?
剪贴板文本是使用 html 格式化的吗?

如何从粘贴的文本中找到字体大小(或任何其他格式)?

(同样的问题也适用于块格式,比如对齐)。

0 投票
1 回答
1446 浏览

qt - 删除/删除/替换 QGraphicsTextItem 中的选定文本

我想删除QGraphicsTextItem.

我一直在搜索它使用的所有类 - 比如QTextCursorQTextDocument......我找不到任何可以删除文本的东西,除了删除所有内容的clear()函数QTextDocument......

如何删除选择?

或者(因为我需要这个自定义粘贴命令),我怎样才能用现有的文本或 html 替换选择?

0 投票
2 回答
608 浏览

qt - 获取空行的格式

我对它的QTextBlock::iterator工作原理有点困惑:

该文档在普通文本上显示了如何使用它的清晰示例:

我遇到空文本行的问题。在那些线上,

我仍然需要能够读取格式(字符和块)

我应该检查最后的块吗?除了新行之外,还有其他方法可以测试没有任何内容的块吗?

我目前的解决方案:检查最后一个迭代器,与“for”循环分开,并测试它是否是文档中的最后一个块(如果我尝试获取文档中最后一个块的片段,程序崩溃)。

看来我正在反对文档......我应该如何获得空行的格式?

编辑:

我的旧解决方案:

基于 Tarod 答案的新解决方案消除了一项测试(但似乎行为不太一致)

我仍然需要检查最后一个块并避免在为空时使用它,有时它会崩溃。

0 投票
1 回答
1012 浏览

qt - QGraphicPixmapItem 双击事件在 QGraphicsTextItem 发送时不会转到父小部件

我在 Qt 中有一个主小部件,这个小部件在其中包含一个QGraphicsViewQGraphicsScene。在场景中,我添加了QGraphicsPixmapItems 和QGraphicsTextItems。在我处理的主要小部件QWidget::mouseDoubleClickEvent ( QMouseEvent * event )中,我的项目都设置了以下标志:

因为我想在场景中移动项目并选择它们,而且我想在双击发生时主小部件处理它。当我双击QGraphicsTextItem它进入mouseDoubleClickEvent主小部件时,但是当我双击QGraphicsPixmap项目时,它会吸收双击并且不会将其发送到主小部件。此外,当ItemIsFocusable未设置标志时,QGraphicsTextItem也会吸收双击事件。为什么会出现?。
我不想实现QGraphicsItems 的子类并且想使用已经定义的方法。这是我所做的图片:

在此处输入图像描述

0 投票
1 回答
4386 浏览

qt - 设置精确高度和宽度的 QGraphicsTextItem 文本内容

我需要创建具有精确宽度和高度的文本内容的文本项。
文字的高度是最重要的要求。
文本的位置应该相对于文本本身。

我还必须能够将它放置在画布上的确切位置。

假设一个(可打印的)画布(在较大的QGraphicsScene)上,比如 5 英寸宽和 1 英寸高,我的文本应该能够从上到下从左到右拉伸 - 并放置在画布上,而不是部分地分开。


我正在QGraphicsTextItem为我的项目类型分类。我正在调整它的大小,使用QTransform(), 到所需的大小 - 以英寸或毫米或像素(72 * 英寸)为单位。
还将边距设置document()为 0,内部的任何内容(如QTextBlockFormat边距)也设置为 0。

我已经实现了一个setItemSize(QSizeF sz)(以像素为单位的 sz),它可以QGraphicsTextItem根据需要调整大小。
使用项目边界矩形初始化 sz。
假设没有换行,单行文本(一旦这个问题得到解决,多行可以单独解决)。

将项目添加到画布时,我仍然看到顶部和底部边距 - 这取决于字体选择。
我在项目周围画了一个矩形来查看它。
顶部/底部距离取决于字体选择。


我尝试使用字体度量来确定这些距离(paint()我一直在画线以尝试确定文本适合的位置和矩形)。

我很高兴至少能够确定正确的大小以用于大写,没有重音或特殊字符字体(这将是一个开始,尽管我自然需要能够使用任何字符)。
但至少有某种方法可以确定文本内容的大小和位置(相对于项目的(0,0)),即使在最简单的情况下......

字体指标tightBoundingRect()似乎是最准确的大小,但似乎无法确定它的位置,以便我可以以某种方式正确创建我的项目,并可能正确调整大小/移动它们以适合画布。


以下是我努力确定相对于项目的 (0,0) 的文本的至少确切大小和位置的一些示例(假设一旦我这样做,我就能够将该信息暴露给外部或包括转变在调整大小的项目变换中)。
请注意,字体度量所宣传的文本大小并不总是覆盖文本,并且对于不同的字体,我无法将紧密的边界矩形(洋红色)定位在文本本身周围。(我做了多次猜测,下面的代码只是一个 - 这些行试图显示不同的字体度量大小)。

在此处输入图像描述

以上是文本项继承绘制功能的实验QGraphicsTextItem

我也尝试过不使用QGraphicsTextItem,而是在矩形内绘制文本。同样的事情也会发生。

(Qt 4.7 - 5.x)

0 投票
1 回答
124 浏览

c++ - Qt - 儿童设置字体中断定位

好的,所以我已经开始使用 Qt 制作游戏,这样我就可以同时学习 Qt 和 C++ :D 但是,我现在遇到了一个问题。

我正在尝试使用 aQGraphicsRectItem作为容器(父)和 aQGraphicsTextItem作为文本本身(子)来制作一个文本框。我面临的问题是孩子与父母的相对位置。如果我在 上设置字体QGraphicsTextItem,则定位将完全错误,并且它会流到容器之外。

文本框.h:

文本框.cpp

Game.cpp(用于创建对象等的代码所在的位置 - 仅包括相关部分):

使用默认字体和大小QGraphicsTextItem

默认字体和大小

设置字体和大小QGraphicsTextItem

设置字体和大小

如您所见,问题是当我设置字体和大小时,文本不再位于父元素的中心。(请不要因为糟糕的代码而对我发火,我对 Qt 和 C++ 都很陌生,我这样做只是为了学习目的)。

0 投票
1 回答
155 浏览

c++ - 使用 QMap 存储对象时应用程序停止响应

我和我的一个朋友正在尝试使用 Qt 在 C++ 中制作游戏。我们想QGraphicsTextItem在 a中存储一些QMap以便在运行时访问它们。我在这里粘贴了我们代码的相关部分,我们的问题是程序停止响应。

游戏.cpp

游戏信息.h

我们都没有太多使用 C++ 或 Qt 的经验,我们将不胜感激。

0 投票
1 回答
358 浏览

c++ - 从未命名的 QGraphicsTextItem 获取文本

我和我的一个朋友目前正在尝试使用 Qt 在 C++ 中制作游戏。我们当前的问题是我们需要从QGraphicsTextItem按钮上的 a获取文本mousePressEvent。在游戏菜单中,可以选择有多少玩家,因此我们QGraphicsTextItem在 for 循环中放置了一个,以便所有用户都可以输入他们的名字。由于 for 循环,我们没有每个文本项对象的名称,因此我们可以存储名称。我们已经设法使用 将所有内存地址存储到对象中QMap,但我们不知道如何获取 this 的文本。我们甚至不知道这是否是最好的方法。

游戏信息.h

游戏.cpp

选择.cpp

由于最后一行而发生的错误如下所示:

文本框.cpp

我的问题是如何从QGraphicsTextItem?