Название: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 09, 2009, 09:32 создаю форму в дизайнере, на ней treeWidget, к классу подключается через множественное наследование, затем необходимо при вводе в lineEdit и нажатию на кнопку создавать новые item в treeWidget, и чтоб они там сохранялись....как получить доступ к созданной в дизайнере форме....подобные темы есть в форуме, но разобраться как сделать в моем случае так и не удалось...помогите, пожалуйста
Название: Re: Спасите!!! файлы Ui Отправлено: lit-uriy от Ноябрь 09, 2009, 11:55 >> но разобраться как сделать в моем случае так и не удалось.
Опиши чем твой случай отличается от тех, что есть на форуме. Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 09, 2009, 12:05 treeWidget созданный в дизайнере изначально пустой...на форме есть lineedit и кнопка необходимо заполнить treeWidget item-ми, текст которых равен = тексту lineedit, по нажатию кнопки. создаю слот
Код: void Form3::on_pushButton_clicked() так вот...items добавляются в treeWidget, но не сохраняются там...если закрыть окно и снова открыть treeWidget пустой....как с этим бороться....или подскажите способ как создавать treeWidget и добавлять item, чтоб они там сохранялись??? Название: Re: Спасите!!! файлы Ui Отправлено: lit-uriy от Ноябрь 09, 2009, 17:45 >>если закрыть окно и снова открыть treeWidget пустой
под окном понимается Form3? полагаю тут UI-файлы не причём. Изобрази схематично, как у тебя взаимодействуют окна между собой, где, например, создаётся объект класса Form3? Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 09, 2009, 19:02 Form3 создается динамически в слоте
Код: void MainWindow::on_pushButton_2_clicked() Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 09, 2009, 19:03 Код: class Form3 : public QWidget { Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 09, 2009, 19:05 и что??? как дальше быть??? как сделать правильно??? подскажите!!!Пожалуйста.. :-\
Название: Re: Спасите!!! файлы Ui Отправлено: lit-uriy от Ноябрь 10, 2009, 02:15 Тут проблема в Си++:
в функции void MainWindow::on_pushButton_2_clicked() ты всякий раз создаёшь новый объект, соответсвенно он пустой. Вынеси объявление указателя Form3* st в объевление класса MainWindow, в конструкторе MainWindow обнули его, а в этой функции сделай так: Код
П.С. т.к. объект не имеет родителя, то удалять его прийдётся тебе ручками. Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 05:46 все так сделал...вылетает программа при нажатии на кнопку...для вызова Form3
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 06:33 Как с этим бороться!!! :o, может у кого есть примеры как правильно использовать на форме treeWidget и добавлять в него item???может необязательно treeWidget...любой другой список...ПОМОГИТЕ НАДО СРОЧНО!!!а то уже тихо схожу с ума :'(
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 06:48 Вроде работает....при закрытии Form3, данные сохраняются....а как сделать чтоб они сохранялись и при перезапуске всей программы???
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 09:41 сохранять в файл или например QSettings
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 09:46 А по подробнее можно пожалуйста...и как это потом использовать???
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 09:57 кого из? про QSettings все в доке
Код: http://doc.trolltech.com/4.5/qsettings.html Код: void MyMainWindow::closeEvent(QCloseEvent *event) Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 10:04 а вы не могли бы объяснить, почему все так сложно...если дерево заполняется в Дизайнере, то все потом сохраняется, а если добавлять динамически, то нужны такие сложности, неужели никак нельзя добавить элемент, в уже существующее дерево и чтоб он там остался???
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 10:13 дерево в дизайнере заполняется в функции SetupUi. И просто повторяется вызов этой функции.
Ты можешь конечно написать свою функцию добавляющую, скажем 10 итемов, и звать ее при открытии программы. А смысл такой статики? Это как "почему я создаю файл, он пустой и если я создам новый то он тоже будет пустой, а если я туда напишу чего-нибудь, этого не будет при создании еще одного" Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 10:19 А как тогда правильно сделать...сохранить дерево при помощи Settings????
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 10:43 ты сохранить стейт окна попробовал? я просто не работал с этой фичей и хз какие параметры он запоминает
Код: где-то объявлено QSettings settings; Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 10:53 да у меня собственно в дереве не иерархическая структура...типа простого списка...попробую сделать
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 11:00 со списком проще, не нужно рекурсии. Это общий вариант. Мб можно и проще...
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 11:13 то есть мне сначально надо перегрузить событие закрытия окна и там делать сохранение дерева...???
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 11:17 можно в деструкторе главного окна
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 11:23 а можно описать ход действий...просто возникают сразу вопросы: сохранять состояние всего окна или можно только treeWidget??? использовать чтение сохраненного состояния при создании экземпляра класса окна???
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 11:29 где сохранять - решать тебе. Вообще логично, что настройки окна (в частности триВиджета) должны читаться\сохраняться когда окно создается удаляется (т.е. в конструкторе\деструкторе). Единственный совет - сделать отдельными функциями, прозе будет переделать если вдруг захочется. Однако часто чтение настроек выносят в мейн, а запись бывает раскидана по коду (т.е. сохраняется напрямую в момент редактирования - по кнопке Apply допустим в неком диалоге).
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 11:39 А сохранять можно только тривиджет, точнее мне нужно, чтоб сохранилось название итемов и установленные данные для них, а все остальное можно не сохранять, ну там место положение и т.д., и остальные виджеты на окне??????????????
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 11:42 конечно
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 11:43 сейчас попробую...спасибо что помагаешь!!!
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 11:44 *помогаешь ;D
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 13:39 попытка оказалась не удачной :( Приложение вылетает, когда пытаюсь создать окно, в котором будут сохраняться настройки
запись насроек Код: void Form3::writeSettings() чтение настроек Код: void Form3::readSettings() Код: void Form3::closeEvent(QCloseEvent *event) В чем может быть дело? Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 13:50 QTreeWidgetItem* item; // кто она? значение присвой
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 14:00 QTreeWidgetItem *item = m_ui.treeWidget->topLevelItem(0);
все равно вылетает Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 14:04 вызов чтения идет до setupUi()? в дизайнере в дереве есть элементы?
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 14:06 вызов чтения после setupUI элементов нет
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 14:09 если добавить элемент в дизайнере, то окно окрывается, но надписи нет...только след элемента, при добавлении нового, он добавляется...но если окно закр/открыть , то ничего несохраняется, где-то у меня косяк :(
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 14:13 выводи в консоль что читаешь из сеттингзов.
А во 2й раз вылетало, ибо дерево пустое и топЛевелитемов нет. Надо Код: QTreeWidgetItem *item = new QTreeWidgetItem (); Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 15:03 а как в readSettings узнать сколько итемов всего, было записано?
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 15:09 topLevelItemCount();
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 15:11 там не надо хранить это число, а достаточно использовать QStringList QSettings::childKeys ()
Но для этого нужна группа (или что бы не было лишних ключей) Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 15:13 :'(чем дальше в лес, тем злее партизаны
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 15:17 ну смотри, ты записал 10 айтемов. Допустим ключ - номер строки
тогда при чтении зовешь QStringList keys = childKeys() и получаешь список всех ключей. Говоришь keys.count() - вуаля, 10 Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 15:25 :)вуаля!!! сейчас книжонку повнимательнее прочитаю...попробую сделать с ключами..спасибо
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 15:36 на... и почитай сначала все-таки книжек
Каждый раз кол-во итемов удваивается а, да вот это: Код: for(int i = 0; i< widget->topLevelItemCount(); i++) { Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 15:46 да я вроде чиатю :-\
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 16:35 только теперь когда я пытаюсь удалять item, изменения почему-то не сохраняются
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 16:37 удаляю так
delete m_ui.treeWidget->currentItem(); Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 16:44 settings.clear() делай
Название: Re: Спасите!!! файлы Ui Отправлено: olefard от Ноябрь 10, 2009, 17:00 а чтоб еще данные для итемов сохранять надо еще один QStringList добавить?
Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 17:03 просто разные ключи делай (01 - 01строка 1й столбец, 02 - 2й столбец). Еще можно записать строки в QByteArray и хранить только его, и доставать из него же.
Название: Re: Спасите!!! файлы Ui Отправлено: lit-uriy от Ноябрь 10, 2009, 18:20 Я б на месте местных админов клизмачей на вставлял, за превращении темы в кашу.
"Спасите!!! файлы Ui" причём здесь "как сохранять данные программы между её запусками"? Название: Re: Спасите!!! файлы Ui Отправлено: Igors от Ноябрь 10, 2009, 19:16 Я б на месте местных админов клизмачей на вставлял, за превращении темы в кашу. Не понял. Я так думал все это посвящено тому что виджет/модель не сохраняет (в рамках одного запуска). Разве это не так?"Спасите!!! файлы Ui" причём здесь "как сохранять данные программы между её запусками"? Название: Re: Спасите!!! файлы Ui Отправлено: Авварон от Ноябрь 10, 2009, 19:53 на самом деле уже нет) сейчас автора интересет сохранение данным между запусками программы
Название: Re: Спасите!!! файлы Ui Отправлено: Igors от Ноябрь 10, 2009, 20:01 на самом деле уже нет) сейчас автора интересет сохранение данным между запусками программы Спасибо, понял - широкий круг интересов |