Название: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 19, 2009, 15:48 В главном окне есть TreeWidget со списком, я сделал контекстное меню, в котором вызываю диалог. И в этом диалоге я хочу узнать, как называется тот элемент, с которого я вызвал меню...
Проблема в том, что у меня не получаетса из диалога (вторая форма) узнать название элемента с основной формы. я пробую делать так: Код: void F_addPc::add_pc_to_db() error: `QTreeWidget*Ui_FMain::trWd_tree' is inaccessible .h Код: #ifndef MAINWINDOW_H .cpp Код: #include <QtCore> Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: spectre71 от Ноябрь 19, 2009, 16:13 FMain::trWd_tree->currentItem()->text(0);
1) FMain - у тебя тип, а не объект; должно быть например так. FMain* MainWindow; // где-то ... .. MainWindow->trWd_tree->currentItem()->text(0); 2) Далее: trWd_tree - должно быть в публичном доступе. Либо в FMain - публичный метод для получения trWd_tree. Например: class FMain : public QMainWindow, Ui::FMain { ... ... public: TreeWidget* get_trWd_tree(void) {return trWd_tree;} }; ... MainWindow->get_trWd_tree()->currentItem()->text(0); Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 19, 2009, 16:27 Можно подробнее узнать что делает этот код?
Код: TreeWidget* get_trWd_tree(void) Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Igors от Ноябрь 19, 2009, 16:34 Самое простое/естественное - снабдить дочернюю форму нужными данными в ее конструкторе, например
Код: class F_addPc : public QWidget, private Ui::F_addPc Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Igors от Ноябрь 19, 2009, 16:46 Можно подробнее узнать что делает этот код? Такие ф-ции называются accessors, они разрешают др. классам пользоваться "внутренностями" данного класса. Можно сделать все данные всех классов public и тогда любой класс может использовать данные любого другого без всяких хитростей. Однако жизнь показала что такие программы хотя и начинают писаться очень резво но доделаны бывают очень редко :) Чем меньше классы знают друг о друге - тем лучше. А если уж надо воспользоваться - пишем такую ф-циюКод: TreeWidget* get_trWd_tree(void) Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 19, 2009, 16:47 Igors, попробовал твой вариант,
компилятор ругается на QString mParentName; Код: public slots: Error: Not a signal or slot declaration и ещё тут - F_addPc *nF_addPc = new F_addPc(this); Код: void FMain::add_sub_group() error: no matching function for call to `F_addPc::F_addPc(FMain* const)' Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Igors от Ноябрь 19, 2009, 17:16 Ну синтаксис-то всегда отрихтовать нужно
1) Код: public slots: 2) Код: void FMain::add_sub_group() И еще: что у Вас за имена такие? Ну напр. F_addPc - кто это такой? Без шансов догадаться да и сами забудете через месяц. Смотрите как в Qt: QString, currentItem - радует глаз. Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 19, 2009, 17:20 А может можно заранее передать название элемента куда нибуть (напр. глобальную в переменную), перед созданием новой формы? А потом получить эту переменную в новой форме?
Над названиями переменных ещё надо поработать) Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Igors от Ноябрь 19, 2009, 18:12 А может можно заранее передать название элемента куда нибуть (напр. глобальную в переменную), перед созданием новой формы? А потом получить эту переменную в новой форме? Вполне разумный вариант но выигрыша в написании он не дает - эту глобальную надо где-то объявить да потом еще в хедере как extern. А по логике это заметно хуже: будет 2 формы одновременно - что тогда делать? Забыли зарядить переменную перед вызовом формы - компилятор здесь ничего не скажет.Название: Re: Как узнать свойства (текст) элемента наход Отправлено: Alchazar от Ноябрь 20, 2009, 10:50 Теперь всё компилируется и запускается, вот только не показывается вторая форма, а вместо этого все элементы второй формы появляются на основной форме.
(http://img266.imageshack.us/img266/5997/screenet.th.jpg) (http://img266.imageshack.us/i/screenet.jpg/) Код: class F_addPc : public QWidget, private Ui::F_addPc Название: Re: Как узнать свойства (текст) элемента наход Отправлено: Igors от Ноябрь 20, 2009, 11:41 Теперь всё компилируется и запускается, вот только не показывается вторая форма, а вместо этого все элементы второй формы появляются на основной форме. Может это крутой дизайн? :) LOLВыкладывайте компилябельный проект, будем разбираться Название: Re: Как узнать свойства (текст) элемента наход Отправлено: Alchazar от Ноябрь 20, 2009, 12:01 положил зип тут http://www.sendspace.com/file/6xstcz (http://www.sendspace.com/file/6xstcz)
что-то мне подсказывает, что ошибка где-то тут: Код: void FMain::add_sub_group() Название: Re: Как узнать свойства (текст) элемента наход Отправлено: Igors от Ноябрь 20, 2009, 15:48 положил зип тут http://www.sendspace.com/file/6xstcz (http://www.sendspace.com/file/6xstcz) Смотрим add_new_pc.ui - Ваша форма просто QWidget, а это еще не диалог и не окно - это виджет который рисуется в окне parent, что он и делает. А почему раньше показывалось окно? Было написаноКод: class F_addPc : public QWidget, private Ui::F_addPc Код: F_addPc(const QString & parentName, QWidget *parent = 0) : QWidget(parent), mParentName(parentName) Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 20, 2009, 15:52 Теперь понятно, а то я всё не понимал в чём разница между еджетом и диалогом.
Спасибо за помощь) Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 25, 2009, 16:35 Я окончательно запутался :(
Переделал форму, сделал QDialog. Форма отображается, вроде всё хорошо, только я не поминаю почти ничего из того что у меня понаписано ( Можете кто нибуть обьяснить по буквам эту строчку? Код
Где и как указать родителя? Если я правильно понял, родитель указывается при создании диалога - FDialog *nFDialog = new FDialog(... или я вообще не туда забрёл? Просветите пожалуйсто... .h Код .срр Код
Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Igors от Ноябрь 25, 2009, 18:07 Можете кто нибуть обьяснить по буквам эту строчку? Это конструктор класса FDialog, принимает 2 аргумента. Первый - ссылка на строку, второй указатель на родителя. "= 0" означает что вызывающий может указать парента а может и нет, в этом случае парент полагается = 0.Код: FDialog(const QString &parentName, QDialog *parent = 0) : QDialog(parent), mParentName(parentName) Где и как указать родителя? Здесь... Код
Код: FDialog *nFDialog = new FDialog(names, this); Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Alchazar от Ноябрь 25, 2009, 19:12 То есть родитель в данном примере - this. А this это, если я правильно понял - FDialog?
new FDialog(names, this); Как тогда сделать родителем главную форму? И можно ли так делать? И ещё вопрос, new FDialog(names, this) указываются два параметра. Как можно узнать значение первого параметра внутри диалога? Название: Re: Как узнать свойства (текст) элемента находящегося в другом окне? Отправлено: Igors от Ноябрь 25, 2009, 19:40 То есть родитель в данном примере - this. А this это, если я правильно понял - FDialog? new FDialog(names, this); Как тогда сделать родителем главную форму? И можно ли так делать? И ещё вопрос, new FDialog(names, this) указываются два параметра. Как можно узнать значение первого параметра внутри диалога? 1) this - это указатель на сам объект внутри любой не-статической его ф-ции. Например Код: void FMain::showEditWindow() 2) parentName был подан в конструкторе и сохранен в члене класса mParentName - просто используйте mParentName в любой ф-ции FDialog |