首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt可检查操作

Qt可检查操作
EN

Stack Overflow用户
提问于 2013-04-05 06:20:25
回答 1查看 2.1K关注 0票数 2

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

代码语言:javascript
复制
void WordWriteMainWindow::on_actionItalic_toggled(bool arg1)
{
    if(arg1==true)
    {
        ui->textEdit->setFontItalic(true);
    }
    else
    {
        ui->textEdit->setFontItalic(false);
    }
}

在大多数情况下,它是有效的。但是,我想让它只在你将要输入斜体时检查动作。当你不用斜体书写时,只有特定的东西才会使动作被选中。例如:如果您正在正常输入,并且单击了斜体区域,则您将开始以斜体输入,但操作将被取消选中。或者,如果您突出显示某个内容并单击斜体,然后单击某个非斜体的位置,则它将被选中,并且您将不会以斜体输入。

我需要使用信号和插槽吗?或者是某种if-else梯子?谢谢你的关心。我期待着解决这个恼人的问题。并期待着未来的许多道路颠簸,因为当涉及到保存文件时,会有一些,等等。

EN

Stack Overflow用户

发布于 2013-04-05 06:42:52

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

代码语言:javascript
复制
void WordWriteMainWindow::on_actionItalic_toggled(bool italic)
{
    ui->textEdit->setFontItalic(italic);
}

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

代码语言:javascript
复制
void WordWriteMainWindow::updateActionStateFromFormat(const QTextCharFormat &f)
{
    ui->yourItalicAction->setChecked(f.fontItalic());
}

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

代码语言:javascript
复制
WordWriteMainWindow::WordWriteMainWindow()
{
    // your existing code goes here
    connect(ui->textEdit, SIGNAL(currentTextFormatChanged(QTextCharFormat)), 
                  this, SLOT(updateActionStateFromFormat(QTextCharFormat)));
}
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15822748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档