问题标签 [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.
qt - 如何让我的插入符号显示在 QGraphicsTextItem 上的第一次双击操作中?
我正在努力让一个QGraphicsTextItem
作为用户友好的对象工作。
由于在可编辑时很难移动,我将其设置为不可编辑,并使其在双击时可编辑。然后在失去焦点时关闭编辑。
我的问题是,插入符号不会在第一次编辑时出现。
我尝试根据鼠标位置获取位置(如this试图解决不同问题的这个问题中),或调用QGraphicsTextItem::mouseDoubleClickEvent(event);
无论我尝试什么,插入符号在第一次操作时都是不可见的 - 直到我开始输入(或者如果我专注于然后重新输入) - 即使它位于正确的位置。
键入或取消选择并重新选择后,插入符号每次都会显示在正常位置。
我试图在项目构造函数中调用 QTextCursor,将其位置设置为 0,没有任何区别。
有什么不同:两种情况之一(我都不能做): a)在构造函数中
开始项目Qt::TextEditorInteraction
开始项目 b)没有移动/焦点/可选标志的开始项目
我也做不到——因为我的默认 item 状态必须是可移动的,这会干扰文本编辑(如开头所述)。
我试图在编辑过程中禁用这些标志......但没有效果。
这是一个简单的代码来演示这个问题,我希望有人能有一个想法。
mytextitem.h
mytextitem.cpp
主文件
我也考虑过编辑文本 - 不确定这是否可行,但我认为它会影响我必须尽快处理的撤消堆栈......
如何让我的插入符号出现在文本项的第一次双击操作中?
(作为用户,看不到插入符号会让我不确定我是否可以打字......即使它有效......如果我没有关于我的操作的反馈,我将不会对对象有信心。这就是我关心的原因这个问题。)
qt - QGraphicsTextItem的格式更改后如何继续文本编辑?
我正在尝试对QGraphicsTextItem
可编辑的内容进行更改(字体更改)。
我正在尝试更改文本片段的格式,或在键入点应用的格式(如果我将文本设置为粗体,则在光标位置执行该操作后我键入的文本将是粗体)。
为文本片段设置格式有效 - 但我找不到将焦点正确返回到项目的方法。
我可以在正确的位置显示插入符号,但我不能在框中输入,除非我实际单击框(即使看起来我应该能够这样做)。
简单示例(由于某种原因,它在关闭程序时崩溃,但我不在乎,因为我正在测试文本类,而不是主程序):
头文件:mytextitem.h
mytextitem.cpp
主文件
只有单击框才能编辑项目。
假设我已经在框中(编辑),并且我按下“粗体”复选框,我希望能够继续编辑 - 在框中输入 - 但即使我尝试
- 设置焦点(将闪烁的文本光标放在框中),
- 为光标设置位置(我可以移动它,或者选择一些东西......这可行,但我想保持当前位置和选择)
- 抓取键盘 - 似乎什么都不做
似乎什么都没有让我回到框中,所以我继续输入(使用新的字体设置)。
我怎样才能得到QTextCursor
或其他任何东西让我继续编辑文本?
qt - 读取富文本字符和块格式
我有使用实现的富文本项目QGraphicsTextItem
设置字体大小,例如:
更复杂的是读取字体大小。
假设我有一个选择,我必须遍历文档,遍历所有QTextBlock
, QTextFragment
,读取QTextCharFormat
...
但是简单的选项,如果没有选择,只需读取光标处的字体大小:
这可行,但我发现了 3 个问题:
QGraphicsTextItem
1)通过属性设置字体大小:
这通过我上面的函数返回 0 get
。要设置整个项目的字体大小,我必须使用与函数中相同的方法set
。
该方法不应该setFont
设置一个可以从QTextCursor
?
2)setHtml
可以设置格式 - 但我看不到任何读取格式的方法
如何从 html 片段中读取富文本格式?是唯一的可能性,解析 html 吗?
3)(我目前的绊脚石)
从外部源复制格式化的文本并粘贴QGraphicsTextItem
似乎保持源的格式 - 但我怎样才能阅读该格式?
如果文本是从外部粘贴的,则上述get
方法读取字体大小为 0。
font().pointSize()
总是返回 8。(我没有设置它,所以我想这是默认值)
是否有另一种读取文本格式的方法?
剪贴板文本是使用 html 格式化的吗?
如何从粘贴的文本中找到字体大小(或任何其他格式)?
(同样的问题也适用于块格式,比如对齐)。
qt - 删除/删除/替换 QGraphicsTextItem 中的选定文本
我想删除QGraphicsTextItem
.
我一直在搜索它使用的所有类 - 比如QTextCursor
,QTextDocument
......我找不到任何可以删除文本的东西,除了删除所有内容的clear()
函数QTextDocument
......
如何删除选择?
或者(因为我需要这个自定义粘贴命令),我怎样才能用现有的文本或 html 替换选择?
qt - 获取空行的格式
我对它的QTextBlock::iterator
工作原理有点困惑:
该文档在普通文本上显示了如何使用它的清晰示例:
我遇到空文本行的问题。在那些线上,
我仍然需要能够读取格式(字符和块)
我应该检查最后的块吗?除了新行之外,还有其他方法可以测试没有任何内容的块吗?
我目前的解决方案:检查最后一个迭代器,与“for”循环分开,并测试它是否是文档中的最后一个块(如果我尝试获取文档中最后一个块的片段,程序崩溃)。
看来我正在反对文档......我应该如何获得空行的格式?
编辑:
我的旧解决方案:
基于 Tarod 答案的新解决方案消除了一项测试(但似乎行为不太一致)
我仍然需要检查最后一个块并避免在为空时使用它,有时它会崩溃。
qt - QGraphicPixmapItem 双击事件在 QGraphicsTextItem 发送时不会转到父小部件
我在 Qt 中有一个主小部件,这个小部件在其中包含一个QGraphicsView
和QGraphicsScene
。在场景中,我添加了QGraphicsPixmapItem
s 和QGraphicsTextItem
s。在我处理的主要小部件QWidget::mouseDoubleClickEvent ( QMouseEvent * event )
中,我的项目都设置了以下标志:
因为我想在场景中移动项目并选择它们,而且我想在双击发生时主小部件处理它。当我双击QGraphicsTextItem
它进入mouseDoubleClickEvent
主小部件时,但是当我双击QGraphicsPixmap
项目时,它会吸收双击并且不会将其发送到主小部件。此外,当ItemIsFocusable
未设置标志时,QGraphicsTextItem
也会吸收双击事件。为什么会出现?。
我不想实现QGraphicsItem
s 的子类并且想使用已经定义的方法。这是我所做的图片:
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)
c++ - Qt - 儿童设置字体中断定位
好的,所以我已经开始使用 Qt 制作游戏,这样我就可以同时学习 Qt 和 C++ :D 但是,我现在遇到了一个问题。
我正在尝试使用 aQGraphicsRectItem
作为容器(父)和 aQGraphicsTextItem
作为文本本身(子)来制作一个文本框。我面临的问题是孩子与父母的相对位置。如果我在 上设置字体QGraphicsTextItem
,则定位将完全错误,并且它会流到容器之外。
文本框.h:
文本框.cpp
Game.cpp(用于创建对象等的代码所在的位置 - 仅包括相关部分):
使用默认字体和大小
QGraphicsTextItem
:
设置字体和大小
QGraphicsTextItem
:
如您所见,问题是当我设置字体和大小时,文本不再位于父元素的中心。(请不要因为糟糕的代码而对我发火,我对 Qt 和 C++ 都很陌生,我这样做只是为了学习目的)。
c++ - 使用 QMap 存储对象时应用程序停止响应
我和我的一个朋友正在尝试使用 Qt 在 C++ 中制作游戏。我们想QGraphicsTextItem
在 a中存储一些QMap
以便在运行时访问它们。我在这里粘贴了我们代码的相关部分,我们的问题是程序停止响应。
游戏.cpp
游戏信息.h
我们都没有太多使用 C++ 或 Qt 的经验,我们将不胜感激。
c++ - 从未命名的 QGraphicsTextItem 获取文本
我和我的一个朋友目前正在尝试使用 Qt 在 C++ 中制作游戏。我们当前的问题是我们需要从QGraphicsTextItem
按钮上的 a获取文本mousePressEvent
。在游戏菜单中,可以选择有多少玩家,因此我们QGraphicsTextItem
在 for 循环中放置了一个,以便所有用户都可以输入他们的名字。由于 for 循环,我们没有每个文本项对象的名称,因此我们可以存储名称。我们已经设法使用 将所有内存地址存储到对象中QMap
,但我们不知道如何获取 this 的文本。我们甚至不知道这是否是最好的方法。
游戏信息.h
游戏.cpp
选择.cpp
由于最后一行而发生的错误如下所示:
文本框.cpp
我的问题是如何从QGraphicsTextItem
?