Название: Обращение к динамическим именам объектов Отправлено: FIPC от Апрель 11, 2011, 19:37 Всем доброго времени суток, подскажите пожалуйста, возможно ли использовать динамические имена текстовых полей.
Если конкретнее - допустим есть матрица полей text edit размером 10 на 10. Имена полей формата: text1_1 text1_2 .... text1_10 text2_1 .................. text2_10 ......................................... text10_1 ................. text10_10 У нас есть какое то текстовое поле, из которого мы получаем количество видимых полей по х и по у. Например text1_1 text1_2 text1_3 text2_1 text2_2 text2_3 Остальное же необходимо сделать невидимыми. Сам вопрос - каким образом в алгоритме сделать так, чтобы в строке: ui->textХ_Х->setVisible(1); Вместо textХ_Х в цикле подставлялась динамически формируемая строка. В php это делается очень просто с помощью склеивания и служебных символов, но как это делается здесь интернет умалчивает. Заранее спасибо. Название: Re: Обращение к динамическим именам объекто Отправлено: Пантер от Апрель 11, 2011, 20:02 Можно использовать objectName. А можно вот так QMap <QPair <int, int>, QWidget*> (или QMap <QString /*name*/, QWidget*>).
Название: Re: Обращение к динамическим именам объектов Отправлено: madRoger от Апрель 11, 2011, 20:05 QObject::findChild
Название: Re: Обращение к динамическим именам объектов Отправлено: FIPC от Апрель 12, 2011, 00:03 Тут представлены просто попытки задать объект класса как что то формируемое. Основной вопрос в механизме и он все еще не исчерпал себя.
QMap не подходит ибо при следующем коде QString S="text1_2"; QMap<QString, QString> map; map["textt"]=S; ui->map("textt")->setText("atatatata"); Выскакивает: 'class Ui::MainWindow' has no member named 'map' findChild тоже не особо работает, но тут судя по всему мой косяк - подскажите пожалуйста, что не так? QString S="text1_2"; QWidget parentWidget; QTextEdit *textt = parentWidget->findChild<QTextEdit *>(S); ui->textt->setText("atatatata"); Выскакивает: base operand of '->' has non-pointer type 'QWidget' 'class Ui::MainWindow' has no member named 'textt' Прогнозируя вопросы - если изменить класс с QWidget на QObject, просто напросто меняется соответствующий текст в первой ошибке Если есть еще идеи, буду благодарен. Название: Re: Обращение к динамическим именам объекто Отправлено: mutineer от Апрель 12, 2011, 00:31 Если обращаться нужно только по индексам, не проще ли массив указателей сделать?
2 FIPC: Оба примера бред какой-то. Ты про плюсы хоть что-нить читал вообще? Название: Re: Обращение к динамическим именам объекто&# Отправлено: FIPC от Апрель 12, 2011, 01:20 Если обращаться нужно только по индексам, не проще ли массив указателей сделать? 2 FIPC: Оба примера бред какой-то. Ты про плюсы хоть что-нить читал вообще? По поводу массива указателей идея была с самого начала, но синтаксис не позволяет (если у меня конечно голова на месте), она очень быстро отвалилась. Что именно тебе в примерах не нравится? Это просто коротенькие вырезки из обработчика события. Название: Re: Обращение к динамическим именам объектов Отправлено: mutineer от Апрель 12, 2011, 01:59 Синтаксис чего не позволяет?
1 пример: создал map с ключем строкой и значением строкой в текущей области видимости, а вызываешь почему-то как члена класса ui. Откуда ж мапу быть в том классе? Да и у строки (а ведь map["textt"] (скобочки не те, опять же) возвращает именно строку) нету метода setText(). 2 пример: parentWidget не является указателем, а обращаешься ты к его методу как по указателю. Детей у него в этом методе не создается, ну да ладно, предположим что между созданием parentWidget и поиском у него Child есть какой-то не показанный тут код, который этих детей добавляет. Но с чего ты взял что findChild это шаблонная функция, которой нужно шаблонный параметр указывать?(в угловых скобочках который). Ну и опять же textt создан тут, присвоен тут, а обращаешься ты к нему через какой-то ui Название: Re: Обращение к динамическим именам объектов Отправлено: Disaron от Апрель 12, 2011, 11:47 Но с чего ты взял что findChild это шаблонная функция, которой нужно шаблонный параметр указывать?(в угловых скобочках который). Справедливости ради - она таки шаблонная.Название: Re: Обращение к динамическим именам объектов Отправлено: mutineer от Апрель 12, 2011, 11:53 Но с чего ты взял что findChild это шаблонная функция, которой нужно шаблонный параметр указывать?(в угловых скобочках который). Справедливости ради - она таки шаблонная.Да, извиняюсь, тут недосмотрел Название: Re: Обращение к динамическим именам объекто Отправлено: pokidoff от Апрель 15, 2011, 12:30 Код: //Объявляем хранилище такого типа PS: Не забудь либо указать parent при создании виджетов, либо в цикле вызвать для каждого элемента хранилища delete map.value(QPair<int,int>(x,y)) Название: Re: Обращение к динамическим именам объектов Отправлено: RoulanD от Апрель 19, 2011, 17:08 Конечно всё это очень интересно, но если тебе нужен результат то реально не проще ли было сделать двумерный массив нужных тебе объектов
Код а дальше плясать от количества нужных тебе элементов. Вложенный цикл все дела. Формулу для просчета геометрии составить несложно. |