Qt:不通过信号和槽机制恢复首选项

Posted

技术标签:

【中文标题】Qt:不通过信号和槽机制恢复首选项【英文标题】:Qt: Preferences not restored through signal and slot mechanism 【发布时间】:2012-01-31 10:40:07 【问题描述】:

在我的文本编辑器应用程序中,我将用户字体格式选择保存为首选项。

首先在构造函数中设置信号和槽,然后读取首选项,如下代码所示:

构造函数:

boldAction->setCheckable(true);
italicAction->setCheckable(true);
underlineAction->setCheckable(true);
fontSizeSelector->setCheckable(false);

connect(boldAction,SIGNAL(changed()),this,SLOT(bold()));
connect(italicAction,SIGNAL(triggered()),this,SLOT(italic()));
connect(underlineAction,SIGNAL(triggered()),this,SLOT(underline()));

ReadUserPreferences():

void TextEditor::readUserPreferences()
    
        QSettings userPreferences(QSettings::NativeFormat,QSettings::UserScope,ORGANIZATION_TITLE,APPLICATION_TITLE);

        this->boldAction->setChecked( userPreferences.value("appearance/bold").toBool() );
        this->italicAction->setChecked( userPreferences.value("appearance/italic").toBool() );
        this->underlineAction->setChecked( userPreferences.value("appearance/underline").toBool());

       //other code.

现在,在 readPreferences 函数中,当boldAction->setChecked(true); 时,文本不应该变成粗体,因为已经定义了信号和槽机制吗?如果是这样,那为什么它不能在我的应用程序上运行?粗体功能本身工作得很好。

有没有比我现在做的更好的方法?感谢您的帮助

【问题讨论】:

【参考方案1】:

这里似乎有两个问题。

首先,您连接到了错误的信号。 changed 信号没有传递指示操作的已检查 状态的值,并且在调用setChecked 时根本不会发出triggered。您需要连接到toggled 信号。

其次,只有在 checked 状态发生变化时才会发出信号。因此,如果该操作已被检查并且用户偏好评估为true,则不会发生任何事情。您可能需要采取措施确保在连接信号之前设置适当的默认状态。

【讨论】:

以上是关于Qt:不通过信号和槽机制恢复首选项的主要内容,如果未能解决你的问题,请参考以下文章

初见QT---信号和槽

qt中的信号和槽机制

Qt 6.x中的信号和槽介绍及示例

Qt 6.x中的信号和槽介绍及示例

Qt4 中的信号和槽

PyQt5的信号和槽