【问题标题】:How to format the selected text in a QTextEdit by pressing a button如何通过按下按钮来格式化 QTextEdit 中的选定文本
【发布时间】:2010-09-03 14:27:47
【问题描述】:

我想通过单击按钮来格式化 QTextEdit 中的选定文本。例如,如果它不是粗体,我想将其设为粗体,如果它是粗体,则将其设为非粗体。请帮我举个例子。

编辑:

实际上我已经找到了一个代码 - 用于文本编辑器的 qt 演示,它可以满足我的需要:

void
MyTextEdit::boldText(bool isBold) //this is the SLOT for the button trigger(bool)
{
    QTextCharFormat fmt;
    fmt.setFontWeight(isBold ? QFont::Bold : QFont::Normal);
    mergeFormatOnWordOrSelection(fmt);
}

void
MyTextEdit::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
 {
     QTextCursor cursor = m_textEdit->textCursor();
     if (!cursor.hasSelection())
         cursor.select(QTextCursor::WordUnderCursor);
     cursor.mergeCharFormat(format);
     m_textEdit->mergeCurrentCharFormat(format);
 }

但我不明白 textCursor() 方法返回了什么,以及属性的合并是如何完成的?只是一些格式正在改变,其中一些保持不变。 mergeCharFormat 函数如何理解要更改的内容和保持原样的内容。请解释一下这2件事。 谢谢。

【问题讨论】:

    标签: c++ qt formatting selection qtextedit


    【解决方案1】:

    textCursor() 返回一个 textCursor,其中包含您在 textEdit 中使用的光标位置,请参阅 Qt 类中的 QTextCursor。因此,通过选择光标开始和结束位置所包含的文本,您可以获得当前突出显示的文本。

    至于 mergeCharFormat,我猜它是用来应用新状态(粗体、斜体、下划线)并保留现有状态。假设您的文本已经加了下划线并且您应用了粗体,您会想要保留两者。

    希望这会有所帮助。

    【讨论】:

    • 按钮在哪里?或者选择的文字在哪里?
    • 您可以将按钮的触发信号连接到一个槽,该槽将 HTML 标记放置在所选文本的开头和结尾。要查找当前选择的文本,您必须使用返回 QTextCursor 的 QTextEdit::textCursor() 检查。我将尝试更新上面的示例。
    • 你是对的,但是如果文本是斜体并且我用粗体文本()将其变为粗体,那么当我创建一个新的 QTextCharFormat 对象时,该文本应该变为粗体(并失去斜体)斜体参数默认为非斜体(即假)。所以 cursor.mergeCharFormat() 函数应该考虑改变斜体参数,并且 xt 应该失去它的斜体。你同意吗?
    • 我认为如果选择的文本以斜体开头,除非您更改 italic 属性,否则它将保持斜体。那是因为您将新格式与 currentChar 的格式合并。
    • 更好的查看方式是,当您合并时,格式的各个方面都保持不变,除了您在刚刚创建的 QTextCharFormat 中指定的那些.所以对于实现,我猜你是对的,构造函数没有给出一个假值的真值,而是一个未初始化的值给所有属性,并且它们保持这种状态,直到你指定一个更改,在我们的例子中是粗体。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2015-01-28
    相关资源
    最近更新 更多