2

我正在制作一个富文本编辑器,但我的可检查操作遇到了问题。现在我有:

void WordWriteMainWindow::on_actionItalic_toggled(bool arg1)
{
    if(arg1==true)
    {
        ui->textEdit->setFontItalic(true);
    }
    else
    {
        ui->textEdit->setFontItalic(false);
    }
}

在大多数情况下,它都有效。但是,我想这样做,以便仅在您要输入斜体字时检查该操作。当您不以斜体书写时,只有特定的事情会检查操作。示例:如果您正在正常输入并单击斜体区域,您将开始输入斜体,但该操作将被取消选中。或者,如果您突出显示某些内容并单击斜体,然后单击离开到非斜体的某个位置,它将被选中,您将不会输入斜体。

我需要使用信号和插槽吗?或者可能是某种 if-else 阶梯?谢谢你的关心。我期待解决这个烦人的问题。并期待许多未来的道路颠簸,因为在保存文件等方面会有一些障碍。

4

1 回答 1

2

首先,您的代码可读性不是很好。为什么不将“bool arg1”替换为更具描述性的内容,例如“bool enabled”甚至“bool italic”?之后,您还可以使该函数成为一个简单的单行函数:

void WordWriteMainWindow::on_actionItalic_toggled(bool italic)
{
    ui->textEdit->setFontItalic(italic);
}

转到您的实际问题,是的,必须有“某些东西”将动作状态与QTextEdit当前认为的活动状态联系起来——到目前为止,您只指定了相反方向的耦合。QTextEdit 提供您可以连接的currentCharFormatChanged(const QTextCharFormat &)信号。将您的另一个插槽连接到其中并更新动作检查状态:

void WordWriteMainWindow::updateActionStateFromFormat(const QTextCharFormat &f)
{
    ui->yourItalicAction->setChecked(f.fontItalic());
}

当然,您必须将该信号连接到您的插槽。最简单的方法是将其添加到构造函数中:

WordWriteMainWindow::WordWriteMainWindow()
{
    // your existing code goes here
    connect(ui->textEdit, SIGNAL(currentTextFormatChanged(QTextCharFormat)), 
                  this, SLOT(updateActionStateFromFormat(QTextCharFormat)));
}
于 2013-04-04T22:42:52.363 回答