Qt可检查的动作

Qt checkable actions

本文关键字:检查 Qt      更新时间:2023-10-16

我正在制作一个富文本编辑器,我在可检查操作方面遇到了麻烦。现在我有:

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

在大多数情况下,它是有效的。但是,我想让这个动作只在你要输入斜体时才被检查。只有在不使用斜体的情况下,才会检查特定的操作。例如:如果您正在正常键入,并且单击一个斜体区域,您将开始以斜体键入,但该操作将未选中。或者如果你高亮一些东西,然后点击斜体,然后你点击到非斜体的地方它会被检查,你不会键入斜体。

我需要使用信号和插槽吗?或者是某种"如果-否则"的梯子?谢谢你的关心。我期待着解决这个恼人的问题。并期待未来的许多道路障碍,因为在保存文件等方面会有一些。

首先,您的代码不是很好读。为什么不将"bool arg1"替换为更具描述性的东西,如"启用bool"或甚至"bool斜体"?之后,您还可以将该函数变成简单的一行代码:

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

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

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)));
}