Russian Qt Forum
Ноябрь 25, 2024, 17:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString\int вместо имени винджета\функции  (Прочитано 7255 раз)
yesrus
Гость
« : Март 22, 2009, 01:17 »

Здравствуйте! Возник вопрос-можно ли использовать значение QString или к примеру int как имя виджета или функции.
т.е. есть 10 винджетов (QPushButton) - a1,a2,a3....b1,b2,b3...
Можно и к примеру записать имя виджета в QString (string) или номер в int (i)и вызвать потом -
к примеру:
Код:
i=1;
a[i]->setText("text");
или
string="b1";

string->setText("text");

Если можно то как ? В интернете искать пытался..но не совсем понятно как сформировать поисковый запрос...в примерах нигде ничего похожего не видел.
« Последнее редактирование: Март 22, 2009, 01:30 от yesrus » Записан
BaltikS
Гость
« Ответ #1 : Март 22, 2009, 01:42 »

Если Вы это имели ввиду, то:
Код
C++ (Qt)
QList<QPushButton *> listButtons;
QPushButton *pb = 0;
for (int i= 0; i<20; ++i)
{
      pb = new QPushButton(this);
      pb->setName("MyButton"+QString::number(i));
      listButtons->append(pb);
}
 
Записан
yesrus
Гость
« Ответ #2 : Март 22, 2009, 01:53 »

Не совсем, интересен вопрос как с ними работать..т.е. как обратиться к объекту чье имя записанно в qstring или qlist и т.д.(задать текст для кнопки которая находится на 5 строке QList к примеру (т.е. аналог команды
Код:
mybutton->setText("text");
только вместо mybutton там должно быть нечто вроде
Код:
list.at[i]
где list - объект типа QList и i - некоторое число, или же к примеру
Код:
a[i]->setText("text")
где а - буква, а i номер, при условии, что у меня заранее определены кнопки с именами a1 a2 a3 и т.д.)

т.е. идея такова-у меня есть много кнопок и мне нужно зная их имена (имена считываем из файла или получаем через сокет по сети) которые записаны в QString или в int (при условии, что буквенное имя заранее известно и в int только численная часть имени объекта) работать с ними..изменять их параметры..цвет и т.д.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Март 22, 2009, 02:11 »

findChild<QPushButton *>("button1")
оно?
Записан

Юра.
BRE
Гость
« Ответ #4 : Март 22, 2009, 07:21 »

Не совсем, интересен вопрос как с ними работать..т.е. как обратиться к объекту чье имя записанно в qstring или qlist и т.д.(задать текст для кнопки которая находится на 5 строке QList к примеру (т.е. аналог команды
Код:
mybutton->setText("text");
только вместо mybutton там должно быть нечто вроде
Код:
list.at[i]
где list - объект типа QList и i - некоторое число, или же к примеру
Код:
a[i]->setText("text")
где а - буква, а i номер, при условии, что у меня заранее определены кнопки с именами a1 a2 a3 и т.д.)
Это по номеру (int)
Код
C++ (Qt)
QList<QPushButton *> list;
for( int i = 0; i < 10; ++i )
{
   QPushButton *btn = new QPushButton( ... );
   list.append( btn );
}
 
// Использование
list[ 3 ]->setText( .... );
list.at( 7 )->setText( .... );
 

Это по имени (QString)
Код
C++ (Qt)
QMap<QSting, QPushButton*> map;
map[ "Button A" ] = new QPushButton( ... );
map[ "Button B" ] = new QPushButton( ... );
map[ "Button C" ] = new QPushButton( ... );
 
// Использование
map[ "Button B" ]->setText( .... );
 
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Март 23, 2009, 22:30 »

в С++ нет eval. Поэтому только костыли типа хранения указателей в QHash, как выше показано.
Записан
BRE
Гость
« Ответ #6 : Март 23, 2009, 22:57 »

в С++ нет eval. Поэтому только костыли типа хранения указателей в QHash, как выше показано.
Как-то не пойму в чем эти костыли заключаются?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Март 24, 2009, 00:25 »

Как-то не пойму в чем эти костыли заключаются?

потому решение поставленной задачи -

Код:
eval "obj=\"\$button1\"";
obj->setText("hello, button1");

А так руками храним карту соответствий, руками ищем и т.д. Костыль он и есть.
Записан
BRE
Гость
« Ответ #8 : Март 24, 2009, 00:28 »

потому решение поставленной задачи -

Код:
eval "obj=\"\$button1\"";
obj->setText("hello, button1");

А так руками храним карту соответствий, руками ищем и т.д. Костыль он и есть.
Аааа.  Смеющийся
Не, хочу так.
Код
C++ (Qt)
Моя_программа()
{
   работать();
}
 
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Март 24, 2009, 00:33 »

эээ не понял.. Улыбающийся
Записан
BRE
Гость
« Ответ #10 : Март 24, 2009, 00:45 »

эээ не понял.. Улыбающийся
Это я к тому, что не надо стесняться руками работу выполнять.  Подмигивающий
А выше пример идеальной программы, все остальное должен сделать компилятор.  Смеющийся
Записан
yesrus
Гость
« Ответ #11 : Март 25, 2009, 20:39 »

Жаль, что можно выкрутиться только хранением в Qmap :<, но все-равно всем спасибо, альфа версия проекта готова Улыбающийся и хорошо, что это был именно qt...на чистом с++ (как изначально планировалось)..страшно даже подумать сколько бы это заняло...  (особенно учитывая, что я только начинаю изучать с++\qt), стало на 100% понятно почему большая часть пишет на шарпе и яве...раньше это казалось..кхм..странным  Веселый
« Последнее редактирование: Март 25, 2009, 20:40 от yesrus » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #12 : Март 30, 2009, 16:45 »

в STL тоже есть map
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 23.