Qt可检查的行动

时间:2013-04-04 22:20:25

标签: c++ qt button action signals

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

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

大多数情况下都有效。但是,我想这样做,以便在您打算键入斜体时仅检查操作。只有特定的事情才会在您不用斜体书写时检查操作。示例:如果您正常键入并单击斜体区域,则将开始以斜体键入,但操作将取消选中。或者,如果您突出显示某些内容并单击斜体,然后单击一下而不是斜体,则会检查它并且您不会输入斜体。

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

1 个答案:

答案 0 :(得分:2)

首先,您的代码不是非常易读。为什么不用“bool enabled”甚至“bool italic”等更具描述性的东西替换“bool arg1”?之后,您还可以将该功能简化为一行:

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