Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения? / 11 сообщений из 11, страница 1 из 1
18.04.2017, 10:03
    #39440017
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
Представим ситуацию, что юзер открыл приложение, заполнил кучу полей, поработал и закрыл. При повторном открытии он хочет видеть старые значения, чтобы не вводить все по- новой.

Есть у Qt- формы или отдельных ее виджетов возможность сохранять значения между сеансами работы пользователя?
...
Рейтинг: 0 / 0
18.04.2017, 11:13
    #39440076
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
AlekseySQL,

Можно лишь сохранить положения всех панелей у QMainWindow (см. http://doc.qt.io/qt-4.8/qmainwindow.html#saveState).
А так, можешь пользоваться QSettings чтобы сохранить значения всех полей. Не думаю, что уйдёт много труда чтобы пробежаться в цикле по всем виджетам, вытащить из них значения и заперсистить их по objectName'у в QSettings.
...
Рейтинг: 0 / 0
18.04.2017, 12:36
    #39440149
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
NekZ,

спасибо!

А как обойти все виждеты формы типа QlineEdit? Я не нашел метода кроме прописывания списка виджетов руками.
...
Рейтинг: 0 / 0
18.04.2017, 12:57
    #39440168
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
AlekseySQL,

Если ты знаком с механизмом Parent-Children Ownership в Qt и с метаобъектной системой, то это должно быть просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for( QObject * child: mainWindow->children() )
{
  if( QLineEdit * edit = qobject_cast< QLineEdit * >( child ) )
  {
    // persist the value from edit->text()
  }
}
...
Рейтинг: 0 / 0
18.04.2017, 13:40
    #39440202
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
NekZ,

Спасибо, познакомлюсь с механизмом Parent-Children Ownership :)
...
Рейтинг: 0 / 0
21.04.2017, 13:02
    #39442232
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
Кто подскажет, почему при закрытии формы в деструкторе класса диалога не срабатывает точка останова?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DlgEncoding::~DlgEncoding()
{
    //сохраним значения
    MyLib::WriteDialogVariable(this, "DirEncoding"); //ЭТОТ КОД НЕ ВЫЗЫВАЕТСЯ!!!

    delete ui;
}




В итоге я не могу сохранить значения виджетов формы.
...
Рейтинг: 0 / 0
21.04.2017, 13:15
    #39442245
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
Я в главном окне сигналам нажатия на пункты меню назначил слоты, в которых открываются формы:

Код: plaintext
1.
2.
3.
4.
5.
6.
void MainWindow::ShowFormEncoding()
{
    DlgEncoding *w = new DlgEncoding;
    w->setModal(true);
    w->show();
}



но вот при интерактивном закрытии деструкторы этих форм не вызываются.
...
Рейтинг: 0 / 0
21.04.2017, 13:25
    #39442254
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
AlekseySQLЯ в главном окне сигналам нажатия на пункты меню назначил слоты, в которых открываются формы:

Код: plaintext
1.
2.
3.
4.
5.
6.
void MainWindow::ShowFormEncoding()
{
    DlgEncoding *w = new DlgEncoding;
    w->setModal(true);
    w->show();
}



но вот при интерактивном закрытии деструкторы этих форм не вызываются.

У тебя memory leak. Вообще, там new не нужен, это тебе не Java.
Код: plaintext
1.
2.
3.
4.
5.
6.
void MainWindow::ShowFormEncoding()
{
    DlgEncoding w;
    w.setModal(true);
    w.show();
}


Вот так деструктор будет вызываться как надо.
...
Рейтинг: 0 / 0
21.04.2017, 13:35
    #39442260
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
NekZ,

Так деструктор вызывается сразу и форма не открывается. С тем же эффектом я мог написать

Код: plaintext
1.
2.
3.
4.
DlgEncoding *w = new DlgEncoding;
w->setModal(true);
w->show();
delete w;
...
Рейтинг: 0 / 0
21.04.2017, 13:48
    #39442271
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
AlekseySQL,

ПардонЪ. Используй exec() вместо show(). Если я правильно понял, у тебя DlgEncoding наследуется от QDialog.
...
Рейтинг: 0 / 0
21.04.2017, 13:51
    #39442275
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения?
NekZAlekseySQL,

ПардонЪ. Используй exec() вместо show(). Если я правильно понял, у тебя DlgEncoding наследуется от QDialog.

Спасибо, работает!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как создать форму QT, чтобы виджеты сохраняли свои значения между запусками приложения? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]