QTextEdit :: cursorPositionChanged() - >使用QComboBox和按钮同步字体样式

时间:2017-12-15 12:13:04

标签: c++ qt fonts qtextedit qtextcursor

我遇到了问题。我输入了字体大小为15的文本:" Hello"。然后我输入一个字体大小为20的文本:" World"。当我将光标的位置改回第一行时,我的字体大小将从20变为15.但我的QComboBox仍然显示" 20"。如何使用QComboBox和按钮(粗体,斜体,下划线)进行字体样式同步?

https://thepasteb.in/p/Lghpcmp0oGM1mUW

代码:

# Custom environment variables
ENV original_path="${PATH}"
ENV path_gcc531="/opt/rh/devtoolset-4/root/usr/bin:${original_path}"
ENV cc_gcc531=/opt/rh/devtoolset-4/root/usr/bin/gcc
ENV cxx_gcc531=/opt/rh/devtoolset-4/root/usr/bin/g++
ENV path_gcc631="/opt/rh/devtoolset-6/root/usr/bin:${original_path}"
ENV cc_gcc631=/opt/rh/devtoolset-6/root/usr/bin/gcc
ENV cxx_gcc631=/opt/rh/devtoolset-6/root/usr/bin/g++

RUN \
    cd app1 && \
    # gcc 6.3.1
    PATH="${path_gcc631}" CC="${cc_gcc631}" CXX="${cxx_gcc631}" ./configure && \
    PATH="${path_gcc631}" CC="${cc_gcc631}" CXX="${cxx_gcc631}" gmake && \
    PATH="${path_gcc631}" CC="${cc_gcc631}" CXX="${cxx_gcc631}" gmake install

RUN \
    cd app2 && \
    # gcc 5.3.1
    PATH="${path_gcc531}" CC="${cc_gcc531}" CXX="${cxx_gcc531}" ./configure && \
    PATH="${path_gcc531}" CC="${cc_gcc531}" CXX="${cxx_gcc531}" gmake && \
    PATH="${path_gcc531}" CC="${cc_gcc531}" CXX="${cxx_gcc531}" gmake install

2 个答案:

答案 0 :(得分:0)

编辑2(16.12.2017):

enter image description here

我在这篇文章的最后一篇文章中说过你要改变什么,你说它不起作用。

我拿走了你所有的代码并做了我所说的改变,它对我来说非常适合。

https://pastebin.com/raw/Y38eLYbK

已编辑(15.12.2017):

所以,我可能会理解你的代码发生了什么:

By setFontPointSize(), your are changing the current format size.表示的

QTextCharFormat

所以基本上你有这个: enter image description here

当你把光标放在“Hello”上时,它需要与Hello相关的QTextCharFormat(fontPoinzeSize等于15)。所以你的右上角字体大小对它没有任何影响。

当您将光标放在其他位置时,您需要做的就是将当前QTextCharFormat更改为右上角的大小:

/*  In your .h */
class NotepadWindow{

    /* ... */

    private:
        int m_actualPointSize;
}


/** In your cpp */
NotepadWindow::NotepadWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::NotepadWindow)

{
    /* ... */
    connect(ui->textEdit, SIGNAL(cursorPositionChanged()), this, SLOT(changeCursorPosPointSize()));
}

void NotepadWindow::onFontSizeChanged(QString selected)
{
    m_actualPointSize = selected.toInt();
    ui->textEdit->setFontPointSize(m_actualPointSize);
}

void NotepadWindow::changeCursorPosPointSize()
{
    QTextCharFormat format;
    format.setFontPointSize(m_actualPointSize); // Put the variable that is associated with 
    ui->textEdit->mergeCurrentCharFormat(format);
}

旧帖子:

也许QTextEdit(ui-> textEdit)未更新,您可能需要调用更新函数。

试试这样:

void NotepadWindow::onFontSizeChanged(QString selected)
{
    ui->textEdit->setFontPointSize(selected.toInt());
    ui->textEdit->update(); // Or ->repaint();
}

如果它不起作用,请告诉我们这行所称的方法是什么:

connect(ui->textEdit, SIGNAL(QTextEdit::cursorPositionChanged()), this, SLOT());

因为SLOT()指向任何方法。

答案 1 :(得分:0)

就像你上次评论中所说的那样,你也有同样的问题。

我认为在您的软件中要做的主要事情是“更新”UI信息,如font-size,alignement,bold等等,当它不同时。 这正是Microsoft Word和其他作家所做的。

以前的主要观点是相同的,但是以更常见的方式:

  1. 触发currentCharFormatChanged(const QTextCharFormat &f) 信号以获取有关实际文字的信息(粗体,斜体pointSize aso ..)
  2. 更新有关最后信息的UI信息(如果文本为粗体,请检查粗体按钮aso ..)
  3. 因为QTextCharFormat只提供有关字符而不是对齐的信息,所以你必须得到ui->textEdit->alignment()才能获得对齐信息

    所以同时,为了对齐,你也会这样做:

    1. 触发cursorPositionChanged()信号
    2. 更新UI对齐按钮(如果保留对齐,请选中“左对齐”按钮,如果是中心,请检查中心对齐..)
    3. 这是你的代码:

      notepadwindow.h:https://pastebin.com/8b5UqnZF

      notepadwindow.cpp:https://pastebin.com/ufJPM2Yj

      学习阅读文档或从更简单的事情开始

      我可能错了,但凭借我所看到的,似乎你真的不知道自己在做什么。

      我的意思是,我搜索了文档以找到您需要的回复。我没有直接找到它们,我不得不尝试去理解它是如何工作的,我唯一使用的就是doc。看来你曾多次问过人们在论坛上帮助你,这就是我得出这个结论的原因。

      我知道你肯定是一个初学者,也许你认为搜索文档是浪费时间或者你对它没有任何理解,但如果你想在编程方面取得进步,你必须阅读文档(即使你对它没有任何理解),并在开始时尝试简单的事情来理解你在做什么。

      不要把它当成一种责备,而更像是一种建议:如果你知道自己做了什么,请阅读文档,如果没有,请从容易的事情开始。