Название: Обмен данными между виджетами Отправлено: klim от Ноябрь 16, 2008, 13:01 Вопрос, судя по всему, простецкий, но хорошего ответа так и не нашел.
Есть два виджета в окне программы. Один - редактор, другой - что-то вроде окна предварительного просмотра. Как правильно передать данные, скажем, из QLineEdit'ов 1-го виджета во второй? Название: Re: Обмен данными между виджетами Отправлено: Karl-Philipp от Ноябрь 16, 2008, 14:34 Допуситим, что при наступлении некоторого события (нажатия "кнопки предварительного просмотра", например) данные должны передаваться из одного виджета в другой.
Для этого сперва связываешь (с помощью connect()) сигнал нажатия кнопки и слот виджета "просмотр", а в слоте виджета "просмотр" уже вытягиваешь из виджета "редактор" нужные данные. оно? :) Название: Re: Обмен данными между виджетами Отправлено: klim от Ноябрь 16, 2008, 16:56 Оно. Только одно небольшое уточнение: про подачу сигнала о необходимости обновить данные я догадывался, гораздо мене понятен процесс "вытягивания" данных.
Как к тому виджету обратиться? Допустим в нём меня интересуют значения нескольких переменных. Создать новый экземпляр того виджета по понятным причинам - "не катит". Какой-то указатель на него нужно передавать или как? Название: Re: Обмен данными между виджетами Отправлено: lit-uriy от Ноябрь 16, 2008, 19:07 через сигналы и слоты можно передавать параметры, если их много то можно передавать список.
Название: Re: Обмен данными между виджетами Отправлено: Hort от Ноябрь 16, 2008, 21:53 вызов sender() в слоте возвращает указатель на виджет (или объект) который послал сигнал. из него то можно и выудить нужную тебе информацию
Название: Re: Обмен данными между виджетами Отправлено: Karl-Philipp от Ноябрь 16, 2008, 23:42 Оно. ... Если оба виджета у тебя являются отдельными классами и находятся в mainwindow, то что мешает сделать слот mainwindow (например slotSendViewerData()). Данный слот будет связан с сигналом нажатия некоторой кнопки.Как к тому виджету обратиться?... В теле этого слота можно вызывать некоторый метод виджета "просмотр", куда в качестве параметра передавать указатель на "редактор". Извлечение данных "редактора" - с помощью (get()-методов). Оно? :) Название: Re: Обмен данными между виджетами Отправлено: BRE от Ноябрь 16, 2008, 23:52 Код: class MainWidget : ... Название: Re: Обмен данными между виджетами Отправлено: SASA от Ноябрь 17, 2008, 11:00 Если данные нужны много кому, то лучше выделить их в отдельный объект. Например, структуру или класс. Оба виджета хранят ссылку на данные. И по сигналу просто обновляются.
Название: Re: Обмен данными между виджетами Отправлено: BRE от Ноябрь 17, 2008, 11:19 Если данные нужны много кому, то лучше выделить их в отдельный объект. Например, структуру или класс. Оба виджета хранят ссылку на данные. И по сигналу просто обновляются. В предыдущем посте так и сделано, класс Data.Название: Re: Обмен данными между виджетами Отправлено: SASA от Ноябрь 17, 2008, 19:55 Если данные нужны много кому, то лучше выделить их в отдельный объект. Например, структуру или класс. Оба виджета хранят ссылку на данные. И по сигналу просто обновляются. В предыдущем посте так и сделано, класс Data.Название: Re: Обмен данными между виджетами Отправлено: BRE от Ноябрь 17, 2008, 20:07 Если данные нужны много кому, то лучше выделить их в отдельный объект. Например, структуру или класс. Оба виджета хранят ссылку на данные. И по сигналу просто обновляются. В предыдущем посте так и сделано, класс Data.Название: Re: Обмен данными между виджетами Отправлено: Karl-Philipp от Ноябрь 17, 2008, 20:18 вот вы тут спорите, а ведь товарищ klim не сказал, как должны взаимодействовать эти виджеты :)
Название: Re: Обмен данными между виджетами Отправлено: klim от Ноябрь 17, 2008, 22:15 Чего-то у меня не очень получается через sender() >:(
вот вы тут спорите, а ведь товарищ klim не сказал, как должны взаимодействовать эти виджеты :) Если совсем конкретно:- есть виджет mainwindow, который несет в себе два виджета, унаследованные от qwidget (назовём их виджетами 2-го уровня) - один из виджетов второго уровня (редактор) просто показывает всякие qlineedit'ы из ui-файла - второй виджет второго уровня (просмотрщик) по некому событию должен залезть в данные виджета-редактора, и прямо из qlineedit'a получить значение, которое запишет в переменную (или сразу выведет на экран...) Пробовал вот так: Код: void previewWidget::refresh() Название: Re: Обмен данными между виджетами Отправлено: spirit от Ноябрь 17, 2008, 22:19 нужно сделать так
Код: void previewWidget::refresh() |