所以我有一个在Linux上运行的qt应用程序。最初启动应用程序时,即使未对QSettings进行任何更改,QSettings仍会不断写入settings.conf文件。一旦用户更改了任何设置,它就会停止写入并像正常情况一样工作,并且仅在更改期间写入。我们的硬件没有电源按钮,因此永远不会关闭,并且会不断插入,因此在启动时让QSettings不断写入.conf文件是一个问题。
我在寻找计时器,以确保没有计时器提示要写并且没有计时器。尝试了settings.sync()。我什至在启动时设置了一个一次性的值,因为在首次启动后在应用程序中更改了一个值后,它会停止写入,但这没有用。所有设置持久性都是以这种方式编写的,在我将代码底部的 settings.setValue 注释掉之后,.conf写入过程将按预期进行。我不知道为什么通过单击电源按钮设置值时会写。有什么想法吗?
代码和流程如下:
void MainWindow::onNavBarButtonClicked(int buttonClickedIdAsInt)
{
//.....
case NavBarButton::POWER:
activeScreenContainer->setCurrentWidget(userScreen);
activeScreenContainer ->raise();
navBarFrame->raise();
navBarActiveContainerSeparator->hide();
logoUserScreen->show();
logoUserScreen->raise();
if(orientationSelected == appPersistence::PORTRAIT_ORIENTATION_VALUE) {
timeAndUserFrame->hide();
}
emit userLoggedOut();
}
到
connect(this, &MainWindow::userLoggedOut, musicScreenModel,
&MusicScreenModel::onUserLoggedOut);
到
void MusicScreenModel::onUserLoggedOut()
{
emit userLoggedOutTreble(currentTrebleValue);
}
到
connect(musicScreenModel, &MusicScreenModel::userLoggedOutTreble,
settingsScreenModel, &SettingsScreenModel::onUserLoggedOutTreble);
到
void SettingsScreenModel::onUserLoggedOutTreble(int trebleToStore)
{
settings.setValue(appPersistence::MUSIC_TREBLE_KEY + loggedInUser,
trebleToStore);
}
主要:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QCoreApplication::setOrganizationName("Organization");
QCoreApplication::setApplicationName("AppName");
QSettings::setPath(QSettings::Format::NativeFormat,QSettings::Scope::UserScope, "/opt/");
QSettings settings;
int fontFamilyId = QFontDatabase::addApplicationFont(":/fonts/Quicksand-Bold.ttf");
settings.setValue(fontStyle::QUICKSAND_BOLD_FAMILY_ID, fontFamilyId);
if(!settings.value(appPersistence::ORIENTATION_SELECTED_KEY).isValid()) {
settings.setValue(appPersistence::ORIENTATION_SELECTED_KEY, appPersistence::LANDSCAPE_ORIENTATION_VALUE);
}
if(true) {
DevOnlyFunctions::seedRng();
}
testBuild::setIsTestBuild(false);
MainWindow w;
w.show();
return a.exec();
}
答案 0 :(得分:0)
所以我终于弄清楚了问题出在哪里。我们有一个计时器,用于显示是否存在某些Can Bus设备。如果它们不存在,我们将隐藏图标并通过调用onUserLoggedOut()方法而不是通过connect语句直接注销用户。我一直在寻找计时器和connect语句,而不是嵌套在使用计时器的开关内的直接方法调用。