c++ - 如何通过按下按钮来格式化 QTextEdit 中的选定文本

标签 c++ qt formatting selection qtextedit

我想通过单击一个按钮来格式化 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 函数如何理解要更改的内容以及保留的内容。请向我解释这两件事。 谢谢。

最佳答案

textCursor() 返回一个包含您在 textEdit 中使用的光标位置的 textCursor,参见 QTextCursor在 Qt 类中。因此,通过选择光标开始和结束位置包含的文本,您将获得当前高亮显示的文本。

至于 mergeCharFormat,我猜它是用来应用新状态(粗体、斜体、下划线)并保留现有状态的。假设您的文本已经带有下划线并且您应用了粗体,您可能希望同时保留这两者。

希望这对您有所帮助。

关于c++ - 如何通过按下按钮来格式化 QTextEdit 中的选定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636723/

相关文章:

c++ - C++ 中的 FIFO 映射

c++ - 使用 C++ 使用 Qt 制作我自己的照片马赛克应用程序

c++ - 如何强制 QDesktopWidget::screenGeometry 返回更新的几何值

c++ - 如何设置dll搜索路径?

c++ - 我如何在 QT 中将 QLabel 堆叠在一起?

c++ - 如何使用 Eigen 避免稀疏表达式中的内存分配

c++ - 生成随机 boolean 值

python - 像在 python 上一样打印 linux man-help

java - iText 章节内的新页面

java - Eclipse 代码格式化 : is there a way to add "section lines"