【问题标题】:Why does cursor.clearselection() does not work in this example?为什么 cursor.clearselection() 在这个例子中不起作用?
【发布时间】:2015-02-23 06:57:55
【问题描述】:

我正在尝试创建一个按钮,为我的QTextEdit 实例的选定文本添加下划线。

在构造函数中,我正在激活光标并为稍后使用的 setFontUnderline 方法设置一个 bool 变量。

QTextCursor cursor1 = ui.myQTextfield->textCursor();
ui.myQTextfield->ensureCursorVisible();
test1 = false;

下面的第一种方法是通过按下下划线按钮来执行的,第二种方法是通过释放它来执行的。

void Hauptfenster::pressed_underlinebutton()
{
    test1 = true;
    ui.myQTextfield->setFontUnderline(test1);   
}

void Hauptfenster::released_underlinebutton()
{
    cursor.clearSelection();
    test1 = false;
    ui.myQTextfield->setFontUnderline(test1);
}

问题在于,在这段代码中,被选中的文本首先被pressed_underlinebutton() 方法加下划线,然后立即被released_underlinebutton 方法取消下划线。

使用 release_underlinebutton() 方法,我想在再次设置 setfontunderline(false) 时不再选择去下划线。

【问题讨论】:

  • s/underles/underlines/?
  • 您还发现其他语法错误吗?
  • 好吧,你用大写开始几个单词。那是不正确的英语,但这不会降低理解力。 textfeld 也很奇怪。 ;-)
  • 你的最后两句话让我很困惑。你想达到什么目标;你能改写一下吗?您的问题是没有清除选择,即cursor.clearSelection(); 不起作用?根据您的 cmets 在已删除的答案下,您的问题是否有超过所选内容的下划线?我不明白。
  • 这可行,但现在我无法再访问 QTextedit。

标签: c++ qt qtgui qtextedit qtextcursor


【解决方案1】:

使用 QTextCursor 复制

文档需要更多阅读:

QTextCursor QTextEdit::​textCursor() const

返回代表当前可见光标的 QTextCursor 的副本。请注意,返回光标的更改不会影响 QTextEdit 的光标;使用 setTextCursor() 更新可见光标。

它写的是你得到了一个副本,所以当你试图改变文本光标特性时,你是在副本而不是原始上进行操作。

因此,您应该确保如果您希望更改对文本编辑控件生效,您需要将文本光标设置回如下:

cursor.clearSelection();
ui.myQTextfield->setTextCursor(cursor); // \o/

直接移动QTextEdit的光标

There is another way to solve this issue,然而。

QTextCursor::Left   9   Move left one character.
QTextCursor::End    11  Move to the end of the document.

所以,你会这样写:

ui.myQTextfield->moveCursor(QTextCursor::End)
ui.myQTextfield->moveCursor(QTextCursor::Left)

【讨论】:

  • 非常感谢。 moveCursor 解决方法解决了我的问题。圣诞快乐
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 2015-03-07
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
相关资源
最近更新 更多