0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 137
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Доступ к виджетам другой формы20.01.2015, 08:34. Показов 7306. Ответов 20
Метки нет (Все метки)
У меня есть форма camWindow.h, на нее в дизайнере навешен gridLayout
Это, скорее всего, очень глупая ошибка. Но я на ней застрял(
0
|
20.01.2015, 08:34 | |
Ответы с готовыми решениями:
20
Доступ к виджетам в QGridLayout Как в классе QVBoxLayout получить доступ к виджетам? Как, имея только указатель на сам QGroubBox получить доступ к виджетам на нем Доступ к переменной другой формы |
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
20.01.2015, 09:37 | 2 |
tohtarov_ufa, По умолчанию ui private. Лучше всего в классе создать public функцию, которая будет работать с ui.
Кроме того причем здесь подсветка?.....эти анализаторы часто глючат и могут не выдавать то что надо. Ты программу собери и посмотри какую ошибку покажет.
1
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
||||||||||||||||||||||||||
22.01.2015, 10:30 | 3 | |||||||||||||||||||||||||
У меня похожий вопрос. Есть список устройств(Device,DeviceN..). При добавления устройства необходимо создавать свои виджеты, поля и т.д. Для Device свой набор виджетов, для DeviceN свой набор. Я для каждого типа устройства создаю свой класс, в этом классе есть функция, которая создает виджеты и возвращает указатель(мне так подсказали сделать)
Вопрос следующий: Как сейчас можно обратиться к виджетам которые мы создали? Как правильно это все реализовать?
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
22.01.2015, 10:40 | 4 |
Casper17, Ну так правильно. Вы хотите обратиться к lbl. А что это такое? Вы создали переменную lbl и указатель на нее удалился с концом выполнения функции widget(). С чего вдруг вы теперь обращаетесь к свойству, которое не создали?
Добавьте в класс Device поле QLabel *lbl; а в widget() напишите lbl = new QLabel; и все будет работать. Ну или тогда уже через lay пытайтесь доступ получить.
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
|
22.01.2015, 10:50 | 5 |
Просто мне посоветовали сделать так "Добавление устройства - создание экземпляра класса (объекта), отображение странички с его настройками вызовом функции класса widget(), которая создаст виджет со всем его содержимым и вернёт указатель. Ну а данные хранить в виде полей этого класса". Вот я и пытаюсь понять как можно обратиться к виджетам через указатель который нам вернет функция widget() и как для этого правильно ее написать.
А поля в классе QLabel *lbl добавлять в Public, да?
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
22.01.2015, 10:58 | 6 |
Casper17, Хотя нет, я не обратил внимание, что у вас сделано каждый раз создание нового окна....тогда так конечно можно, но правильнее использовать QWidget::children () для доступа к объектам....
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
|
22.01.2015, 11:52 | 7 |
solar_wind, Подскажите пожалуйста функция widget() правильно написана, то ли она возвращает, что бы можно было обращаться к виджетам(lbl,pb..) Если да почему не работает list.at(index)->widget()->lbl->setText("УРААА!!");
или так нельзя делать? Чуть по гуглив нашел это. T QObject::findChild ( const QString & name = QString() ) const Это рекомендуете использовать?
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
22.01.2015, 12:00 | 8 |
Casper17, Просто у QWidget нет свойства lbl, вот и не работает.
Что касается правильности, то так то вообщем то все правильно с точки зрения программирования. Правильно ли с точки зрения логики работы программы, это уже тебе нужно думать. Можно в том числе findChild использовать
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
|
22.01.2015, 12:38 | 9 |
Пробую написать программу для отображения информации. Есть центральное устройство, которое принимает данные от других устройств(дом, баня, теплица, гараж) и посылает эти данные по COM порту. Программа считывает эти данные записывает в нужный поля класса и отображает их.
Слева меню выбора устройства, под ним кнопка для добавления устройств. Остальную часть программы занимает QStackedWidget в котором будут отображаться информация с датчиков от выбранного устройства из меню слева. Может конечно я не в ту степь пошел.
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
||||||
24.01.2015, 09:18 | 10 | |||||
solar_wind, С помощью findChildren я получил список элементов в моей формы QPushButton, QLabel, QLabel
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
|
24.01.2015, 10:19 | 12 |
0
|
Заблокирован
|
||||||
24.01.2015, 10:25 | 13 | |||||
Ты не понял, у тебя на форме может быть много QLabel-ов, к какому именно ты хочешь получить доступ, не понятно, но думаю догадаешься сам поставить какой - нибуть if для проверки, ну а чтоб поменять текст у всех QLabel в твоём случае, следует писать так:
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
||||||
24.01.2015, 10:51 | 14 | |||||
DukeNukem, у меня на форма создается два QLabel
Добавлено через 18 минут Попробовал, но текст не меняется. Но цикл проходит два раза, т.к. два QLabel у меня))
0
|
Заблокирован
|
|
24.01.2015, 10:54 | 15 |
Какое имя? Ты имеешь ввиду текст, который написан на QLabel?
QLabel::text() ? Добавлено через 1 минуту Меняется там, где ты его меняешь, а там - это здесь у тебя list.at(0)->widget() Что это? Код весь показывай тогда или архив с проектом прикрепляй
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
|
24.01.2015, 10:56 | 16 |
DukeNukem, Я создаю два QLabel с именами lbl и lbl2. Мне нужно получить доступ к lbl и поменять текст.
0
|
Заблокирован
|
||||||
24.01.2015, 11:06 | 17 | |||||
ты имеешь ввиду, что ты в рантайме хочешь получить название переменной, которую ты использовал для обозначения объекта класса QLabel в коде программы? Это не возможно (почти невозможно, но тема эта явно не для тебя, без обид )
Добавлено через 8 минут Если ты хочешь как - то обособить свои лейблы друг от друга, наследуйся от QLabel и вводи какие - то свои нужные ID, ну или какой - нибуть класс инфо:
0
|
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
|
|||||||||||||||||||||
24.01.2015, 11:18 | 18 | ||||||||||||||||||||
mainwindow.h
Кликните здесь для просмотра всего текста
mainwindow.cpp Кликните здесь для просмотра всего текста
device.h Кликните здесь для просмотра всего текста
device.cpp Кликните здесь для просмотра всего текста
Я из списка ComboBox выбираю первое устройство Device и нажимаю кнопку добавить. В QList добавляется устройство и в stackedWidget добавляется форма для этого устройства функцией widget. Код конечно кривой, много лишнего есть, т.к. экспериментирую)) Да я не обижаюсь))
0
|
5 / 5 / 1
Регистрация: 05.06.2018
Сообщений: 31
|
|
08.08.2018, 14:49 | 19 |
Виноват, разворошил старую тему, но в ней автор так и не получил ответа (и я ковыряю этот вопрос, хочу из диалога поменять текст на кнопке основного окна, формы приложения). Причем поражает, что отвечающие так и не уловили сути, которая понятна даже мне, новичку.
У автора имеется основное окно - mainwindow.cpp и дополнительное в виде диалога device.cpp В основном окне он, понятное дело может сделать так: ui->lbl->setText( "sometext" ); но в диалоге не прокатит. Если бы в диалоге было что-то вроде MainWindow->label->setText("OK"); то осталось бы подцепить лишь #include "maiwindow.h" но сказки нет. Все что может диалог, это подсветить MainWindow->ui; Для передачи переменных между формами есть отличный пример "DemoWidget.rar " в восьмом посте "https://www.cyberforum.ru/qt/thread2183127.html" и можно наверное его "докрутить" с сигналами и слотами примерно до уровня "MainWindow->label->setText("OK");", но получится колхоз с костылями. Должно быть изящное решение. Кто-нибудь подскажет?
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
09.08.2018, 12:49 | 20 |
VladQtCr, Да суть вопроса как раз всем понятна.
Задача сама по себе элементарная. Сигналы и слоты, если они к месту, то это совсем не костыль. В данном случае объект диалога создан в основном окне. По всем правилам ООП диалог не должен знать кто его создал, но может иметь интерфейс для передачи своему создателю какой либо информации. Самым адекватным и независимым методом для этого является механизм сигналов и слотов. Подчиненный диалог должен иметь сигнал, через который он передает наружу данные. Основное окно, при создании подчиненного диалога, должно определиться, как оно хочет с диалогом работать. И если основному окну интересны данные идущие от подчиненного диалога, то оно создает слот и связывает сигнал диалога с этим слотом. Подчиненный диалог отправляет сигнал. Этот сигнал приходит в слот основного окна. Основное окно разбирает полученные данные и отображает все, что ему нужно.
1
|
09.08.2018, 12:49 | |
09.08.2018, 12:49 | |
Помогаю со студенческими работами здесь
20
Получить доступ обьекта из другой формы Доступ к полям одной формы из другой формы Доступ к элементу одной формы из другой формы Доступ из другой формы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |