Постоянство QSettings постоянно записывает в файл конфигурации при первом запуске - PullRequest
0 голосов
/ 30 января 2019

Итак, у меня есть приложение qt, работающее в Linux.Когда приложение изначально запускается, QSettings постоянно записывает в файл settings.conf, хотя в QSettings не было внесено никаких изменений.Как только пользователь меняет какую-либо настройку, он прекращает запись и ведет себя как обычно, и пишет только во время изменений.Наше оборудование не имеет кнопки питания и поэтому никогда не отключается и постоянно подключено, поэтому проблема при постоянной записи 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();
}

1 Ответ

0 голосов
/ 30 января 2019

Итак, я наконец понял, что происходит не так.У нас есть таймер, который показывает наличие определенных устройств Can Bus.Если их нет, мы скрываем значки и выходим из системы напрямую через вызов метода onUserLoggedOut (), а не через оператор connect.Я постоянно искал оператор таймера и соединения, а не прямой вызов метода, вложенный в коммутатор, который использует таймер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...