Russian Qt Forum
Апрель 18, 2024, 10:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 81 82 [83] 84 85 ... 96
1231  Qt / Общие вопросы / Re: Помогите пожалуйста наладить перехват stdout консольного приложения. : Июль 02, 2010, 14:35
я бы дал идею не просто создать процесс-перехватчик запуском одного QProcess, а запустить второй QThread, в нем запускать QProcess, получать там данные дочернего приложения, и через BlockingQueuedConnection передавать в QTextEdit основной нити - так интерфейс гарантированно блокироваться не будет

у меня в приложении похожим образом работает "консоль" - основные действия выполняются фоновым QThread, из которого через блокирующее соединение вычислитель плюется сообщениями, и эти сообщения валятся в QTextEdit в основном треде

только вот QTextEdit при этом все сильно тормозит, он на добавлении строк медлееееееннннннныыыыыыййййй..... Грустный поэтому при полностью асинхронной работе дочернего приложения вполне возможна потеря части сообщений
1232  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 30, 2010, 13:48
Цитировать
сделаешь все то же что уже делал я и поймешь что это не удобно

почему это? я в таком случае просто заменю Settings::Settings() : QSettings( "settings.ini", QSettings::IniFormat ) на Settings::Settings() : QSettings( "settings.xml", QSettings::XmlFormat ) и меня это устроит
1233  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 30, 2010, 10:08
некогда мне еще потрохами XML заниматься... тем более, что в INI пока все работает, что нужно

где-нибудь можно написать или подписать имеющийся feature request чтобы QSettings::XmlFormat и соответствующая поддержка появились?
1234  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 30, 2010, 08:23
Все, исправил... в коде загрузки настроек были пустые пары begin-end и это влияло на запись, поэтому первоначально создавался правильный файл, а если он уже был, то после загрузки настроек все ломалось

ИМХО еще раз - механизм QSettings реализован угребищный, можно было бы сделать гораздо удобнее и надежнее в использовании.

а чтобы не было больше такой ситуации, переделал класс Settings "не по Шлее", сделал 1 метод записи-чтения настроек, чтобы структура задавалась 1 раз

Код:
void Settings::settingsSaveRestore( bool save )
{
if( save )
setValue("SettingsDefined", true );
beginGroup( "ViewSettings" );
{
beginGroup( "MainText" );
{
beginGroup( "FontsAndColors" );
{
if( save )
{
setValue(....);
......
}
else
{
var = value(....).value<QColor>();
....
}
}
endGroup(); // FontsAndColors

//beginGroup( "DistanciesAndSizes" );
//endGroup(); // DistanciesAndSizes

beginGroup( "OtherSettings" );
{
if( save )
{
setValue(....);
....
}
else
{
value = value(....).toInt();
....
}
}
endGroup(); // OtherSettings
}
endGroup(); // MainText

//beginGroup( "ConsoleText" );
{
//beginGroup( "FontsAndColors" );
//endGroup(); // FontsAndColors

//beginGroup( "OtherSettings" );
//endGroup(); //OtherSettings
}
//endGroup(); // ConsoleText

//beginGroup( "SelectAndViewWins" );
//endGroup(); // SelectAndViewWins
}
endGroup(); // ViewSettings

beginGroup( "ShellSettings" );
{
if( save )
{
setValue("MRUlist", MRUlist );
}
else
{
MRUlist = value("MRUlist").toStringList();
}
}
endGroup(); //ShellSettings
if( save )
sync();
}

соответственно, конструктор этого класса

Код:
Settings::Settings()
: QSettings( "settings.ini", QSettings::IniFormat )
{
if( !value( "SettingsDefined" ).toBool() )
{ // файл только что создан, установки не определены, заполняются умолчательными значениями
resetDefaultSettings();
settingsSaveRestore( true );
}
else // установки загружены из файла
settingsSaveRestore( false );
}


рекомендация в Шлее наихудшая
1235  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 21:21
не нравится... это должно было быть нативно
1236  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 20:35
угу, и как его включить, если enum QSettings::Format имеет 2 варианта: QSettings::NativeFormat и QSettings::IniFormat ? я все время удивляюсь, что нет вариант QSettings::XmlFormat, который был бы наиболее логичен
1237  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 20:01
Цитировать
В вашей задаче смысл с ним мучаться есть?

да, есть, требование портабельности + работа без инсталляции

Цитировать
весь код показывай

какой именно? который убран из кода выше? там только строки setValue(), больше ничего

есть еще код загрузки из настроечного файла, там могли оказаться непарные begin-end, хотя маловероятно, и если они в самом деле есть, то точно есть косяк в QSettings, из-за которого загрузка из файла ломает его последующую запись

имхо, эта модель с begin-end - ущербная, и плохо продуманная

я сначала подумал, что можно унаследовать QSetiings, и в классе-наследнике "сообщить" классу-родителю, какие данные надо сохранять и загружать при выполнении sync(), имхо это было бы правильно, но оказалось не так, а гораздо примитивнее
1238  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 15:52
ХОТЯ НЕТ! ВРУ!!!

Первый раз создается правильный файл установок.

Но при перезаписи получается опять двоение...  Непонимающий

Причем при загрузке настроек, они читаются ТОЛЬКО из длинных ключей, то есть, при загрузке правильного созданного в первый раз файла настроек, содержимое MRUlist не восстанавливается
1239  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 15:48
точно! закомментировал все пустые пары begin/end - все стало нормально

не помню, чтобы в документации было где-либо сказано, что пустых групп не должно быть... если пропустил, мой промах, если нет - надо писать report о неполной документации
1240  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 15:43
Код:
[General]
SettingsDefined=true

[ViewSettings]
ProgramText\FontsAndColors\<несколько записей>
ProgramText\OtherSettings\<несколько записей>
SettingsDefined=true
ViewSettings\ProgramText\FontsAndColors\<несколько записей, столько же и такие же, как в предыдущем ключе>
ShellSettings\MRUlist=<список через запятые>

[ShellSettings]
MRUlist=@Invalid()

может собака порылась в том, что у меня есть пустые группы только из begin/end?
1241  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 15:34
нет, не напоминает

я же ясно написал - первый раз ключ создается с пустым списком QStringList, в результате появляется запись с Invalid внутри группы

второй раз тот же самый код создает запись с непустым списком, который записывается, как длинный ключ, а в группу ничего не добавляется

если есть сомнения в моей внимательности или желание поупражняться в проверке баланса begin/end, то вот пожалуйста код функции, пишущей группы, убраны только коды записи отдельных ключей

Код:
void Settings::recordSettings()
{
setValue("SettingsDefined", true );
beginGroup( "ViewSettings" );

beginGroup( "MainText" );

beginGroup( "FontsAndColors" );
endGroup(); // FontsAndColors

beginGroup( "DistanciesAndSizes" );
endGroup(); // DistanciesAndSizes

beginGroup( "OtherSettings" );
endGroup(); // OtherSettings

endGroup(); // MainText

beginGroup( "ConsoleText" );

beginGroup( "FontsAndColors" );
endGroup(); // FontsAndColors

beginGroup( "OtherSettings" );
endGroup(); //OtherSettings

endGroup(); // ConsoleText

beginGroup( "SelectAndView" );
endGroup(); // SelectAndView

endGroup(); // ViewSettings

beginGroup( "ShellSettings" );
setValue("MRUlist", MRUlist );
endGroup(); //ShellSettings

sync();
}
1242  Qt / Общие вопросы / Re: запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 15:02
группа точно закрыта, и пишет в обоих случаях один и тот же метод recordSettings() но в первом случае пишет одно, во втором другое


1243  Qt / Общие вопросы / запись QSettings в INI создает 2 ключа, так и должно быть? : Июнь 29, 2010, 14:44
первый раз пишется объект, наследующий QSettings, записывается пустой QStringList, причем его по идее нельзя ничем заполнять, запись выполняется таким образом:

Код:
beginGroup( "ShellSettings" );
setValue("MRUlist", MRUlist );
endGroup();

в файле появляется запись

Код:
[ShellSettings]
MRUlist=@Invalid()

после добавления хотя бы одного имени в MRU list, он снова сохраняется точно тем же кодом, но в файле остается предыдущая запись и появляется совершенно отдельный ключ, не входящий в сегмент [ShellSettings], но входящий в предыдущий сегмент (в моем случае это [ViewSettings], ключ выглядит таким образом:

Код:
ShellSettings\MRUlist=<полное имя файла>

далее при добавлении файлов в список, они добавляются в этот ключ, а предыдущий созданный инвалид остается на месте

что не есть правильно, хотя ключ восстанавливается вроде бы верно, и при старте приложение получает список предыдущих открытых файлов

баг??
1244  Qt / Общие вопросы / Re: можно ли записать QStringList в QSettings одним махом? : Июнь 29, 2010, 14:08
а-ха... я не правильно понял логику работы QSettings... теперь все ясно
1245  Qt / Общие вопросы / Re: можно ли записать QStringList в QSettings одним махом? : Июнь 29, 2010, 13:09
в классе Settings::QSettings написано

Код:
QStringList MRUlist;

в конструкторе Settings::Settings

Код:
setValue("MRUlist", MRUlist );

MRUlist заполняется из менюшки, которая содержит предыдущие открытые файлы

Код:
settings->MRUlist.clear();
foreach( QAction* action, MRUmenu->actions() )
settings->MRUlist << action->text();
settings->sync();

перед вызовом settings->sync(); точка останова, смотрю settings->MRUlist там все правильно, массив строк с именами предыдущих открытых файлов

но после синхронизации смотрю в файл настроек, там

Код:
MRUlist=@Invalid()

подумал, может быть нельзя пустой QStringList в начале передавать, написал ему MRUlist << "" в конструкторе

в результате в файл записалась одна пустая строка, которая там никак не изменяется, независимо от количества строк в settings->MRUlist перед вызовом sync(), ну и разумеется появляется пустой пункт в MRU при загрузке такого списка после старта приложения

при этом все остальные настройки, которые дискретно записываются (цвета, шрифты, разные параметры) - все давно нормально сохраняется

что не так с MRUlist, почему не записывается при выполнении sync()?
Страниц: 1 ... 81 82 [83] 84 85 ... 96

Страница сгенерирована за 0.059 секунд. Запросов: 23.