标签: qtextcursor

将光标移动到QTextEdit内部

我有一个表格,上面有一个QTextEdit叫做的表格translationInput.我正在尝试为用户提供编辑功能.

QTextEdit将包含HTML格式的文本.我有一组按钮,如" 粗体 "," 斜体 "等,它们应该将相应的标签添加到文档中.如果在没有选择文本时按下按钮,我只想插入一对标签,例如<b></b>.如果选择了某些文本,我希望标签从中向左和向右显示.

这很好用.但是,我还希望在此之后将光标放在结束标记之前,这样用户就可以继续在新添加的标记内输入,而无需手动重新定位光标.默认情况下,光标出现新添加的文本之后(所以在我的情况下,就在结束标记之后).

这是我对Italic按钮的代码:

//getting the selected text(if any), and adding tags.
QString newText = ui.translationInput->textCursor().selectedText().prepend("<i>").append("</i>");
//Inserting the new-formed text into the edit
ui.translationInput->insertPlainText( newText );
//Returning focus to the edit
ui.translationInput->setFocus();
//!!! Here I want to move the cursor 4 characters left to place it before the </i> tag.
ui.translationInput->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
Run Code Online (Sandbox Code Playgroud)

但是,最后一行没有做任何事情,即使movePosition()返回true,光标也不会移动,这意味着所有操作都成功完成.

我也尝试过这样做QTextCursor::PreviousCharacter而不是QTextCursor::Left …

c++ qt qtextedit qtextcursor

9
推荐指数
1
解决办法
2万
查看次数

有选择时防止 QTextEdit 小部件滚动

我对此进行了广泛的研究,但还没有找到令人满意的解决方案:

当满足以下任一条件时,如何在 QTextEdit 小部件的末尾附加文本而不触发到小部件底部的滚动:

  • 用户选择了一些文本。
  • 用户已从底部滚动。

(在所有其他情况下,应该触发滚动到 QTextEdit 小部件的底部。)

这是我目前用来附加text在 QTextEdit 底部的代码widget

const QTextCursor old_cursor = widget.textCursor();

widget.moveCursor(QTextCursor::End);
widget.textCursor().insertText(text);

if (old_cursor.hasSelection())
    widget.setTextCursor(old_cursor);
else widget.moveCursor(QTextCursor::End);
Run Code Online (Sandbox Code Playgroud)

这部分解决了条件 1:问题是视图仍然会滚动,直到只有选择的最后一行可见,此时它确实会停止滚动。

条件 2 根本没有得到处理:一些帖子建议保存垂直滚动条的位置并在附加文本后恢复它,但是我认为这是不正确的,因为在附加文本时滚动条应该向上移动,即使视图保持静止。

请注意,我使用的是QTextCursor::insertText()而不是QTextEdit::append()因为我需要调整附加文本的颜色,无论用户是否选择了文本。


更新:这是我最终得到的代码,感谢 Pavel 的回答:

const QTextCursor old_cursor = widget.textCursor();
const int old_scrollbar_value = widget.verticalScrollBar()->value();
const bool is_scrolled_down = old_scrollbar_value == widget.verticalScrollBar()->maximum();

// Move the cursor to the end of the document.
widget.moveCursor(QTextCursor::End);

// Insert the text at the position of the cursor …
Run Code Online (Sandbox Code Playgroud)

c++ qt scroll qtextedit qtextcursor

6
推荐指数
1
解决办法
3877
查看次数

我如何获得QWebView Editable中textcursor的位置

我有一个可编辑的QWebView,并希望获得TextCursor的位置(QPoint).我搜索但只能找到光标的位置(鼠标指针)webview-> cursor.pos(); 而这个位置不是我想要的.

有人有什么建议吗?

谢谢!

qt cursor qwebview qtextcursor

5
推荐指数
1
解决办法
1002
查看次数

如何更改PyQt4中QTextEdit内部所有内容的fontsize?

我有一个QTextEdit通过使用它的内容被编程的内容QTextEdit.textCursor.

我的计划是让用户检查填充的信息QTextEdit并在必要时进行编辑,然后再使用打印成PDF文件QPrinter.

但是,我想在用户进行编辑之前更改整个内容的字体大小.我不会使用多种字体大小,所以我只需要为内容设置一个字体大小.

我尝试QTextEdit过在QTextEdit.setFontSize(16)操作前后使用,但似乎没有任何效果.

如何更改内容的字体大小textCursor

pyqt pyqt4 qtextedit python-2.7 qtextcursor

4
推荐指数
2
解决办法
1万
查看次数

QLineEdit 光标在 textChanged() 或 commitData() 后移动到结尾

我有QTableView一列使用 aQLineEdit作为其编辑器委托,其他列需要在用户键入时动态更新QLineEdit(例如,其中一列包含在 中键入的文本的长度,QLineEdit它应该作为用户更新类型,而不是等待他们按 Enter 提交)。

我使用了以下代码:Qt:在编辑 QTableView 项目数据时发出信号,而不是在编辑完成后发出信号?这主要是有效的。它将QLineEdit textChanged()信号连接到编辑器的commitData()信号。

这段代码的问题在于,当用户键入时,QLineEdit的插入光标总是跳到末尾。如果您将文本附加到行尾,那很好。但是如果用户想在行的中间插入或编辑文本,每输入一个字母,文本插入光标就会跳到QLineEdit. 每次击键后,他们必须重新定位光标以在中间完成插入/编辑。

如果我禁用映射器,则光标不会跳转,因此它不是编辑器委托所固有的;只有在使用上面链接的问题中的代码时才会发生这种情况。

我查看了 和 的代码QLineEdit textChanged()commitData()但我无法弄清楚是什么导致光标跳到QLineEdit. 有任何想法吗?谢谢!

qt qtableview qlineedit qtextcursor

3
推荐指数
1
解决办法
3534
查看次数

使用QTextCursor选择一段文本

使用Qt框架选择文本片段时遇到问题.例如,如果我有这个文件:"没时间休息".我想选择"ime for r"并从文档中删除这段文字,我应该如何使用QTextCursor?这是我的代码:

QTextCursor *cursor = new QTextCursor(ui->plainTextEdit->document());
cursor->setPosition(StartPos,QTextCursor::MoveAnchor);
cursor->setPosition(EndPos,QTextCursor::KeepAnchor);
cursor->select(QTextCursor::LineUnderCursor);
cursor->clearSelection();
Run Code Online (Sandbox Code Playgroud)

不幸的是,它从文本中删除了整行.我尝试过使用其他选择类型,如WordUnderCursor或BlockUnderCursor,但没有结果.或者也许还有更好的方法吗?提前致谢.

c++ qt qtgui qtextcursor

2
推荐指数
1
解决办法
4569
查看次数

更改QTextBrowser中的最后一行

我有一个QTextBrowser显示行QStringInt.消息看起来像这样:

给柜台留言1

给柜台留言2

给柜台留言3

消息b计数器1

而不是总是为计数器的每个增量添加一个新行,我想只增加Int最后一条消息(最后一行).最有效的方法是什么?

我想出了这个代码,只删除了最后一行QTextBrowser:

ui->outputText->append(messageA + QString::number(counter));
ui->outputText->moveCursor( QTextCursor::End, QTextCursor::MoveAnchor );
ui->outputText->moveCursor( QTextCursor::StartOfLine, QTextCursor::MoveAnchor );
ui->outputText->moveCursor( QTextCursor::End, QTextCursor::KeepAnchor );
ui->outputText->textCursor().removeSelectedText();
ui->outputText->append(messageA + QString::number(++counter));
Run Code Online (Sandbox Code Playgroud)

不幸的是,在删除看起来非常丑陋的最后一行之后,这给我留下了空行.实现这一目标的最佳方法是什么,不涉及清除整体QTextBroswer并再次附加每一行.

c++ qt qtgui qtextbrowser qtextcursor

1
推荐指数
1
解决办法
689
查看次数

如何获取qtextedit中的列号?

我可以在 QTextEdit 中获取光标的行号。但无法实现获取列号信息。(注意:我在获取行号信息时使用 QTextBlock。)是否有一种简单的方法来获取列号?我应该怎么办?尽管我在这里这里阅读,QTextBlock 类仍然让我感到困惑。

c++ user-interface qt qtextedit qtextcursor

1
推荐指数
1
解决办法
2483
查看次数