Russian Qt Forum

Qt => Общие вопросы => Тема начата: yesrus от Март 22, 2009, 01:17



Название: QString\int вместо имени винджета\функции
Отправлено: 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");

Если можно то как ? В интернете искать пытался..но не совсем понятно как сформировать поисковый запрос...в примерах нигде ничего похожего не видел.


Название: Re: QString\int вместо имени винджета\функции
Отправлено: BaltikS от Март 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);
}
 


Название: Re: QString\int вместо имени винджета\функции
Отправлено: yesrus от Март 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 только численная часть имени объекта) работать с ними..изменять их параметры..цвет и т.д.


Название: Re: QString\int вместо имени винджета\функции
Отправлено: lit-uriy от Март 22, 2009, 02:11
findChild<QPushButton *>("button1")
оно?


Название: Re: QString\int вместо имени винджета\функции
Отправлено: BRE от Март 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( .... );
 


Название: Re: QString\int вместо имени винджета\функции
Отправлено: Alex Custov от Март 23, 2009, 22:30
в С++ нет eval. Поэтому только костыли типа хранения указателей в QHash, как выше показано.


Название: Re: QString\int вместо имени винджета\функции
Отправлено: BRE от Март 23, 2009, 22:57
в С++ нет eval. Поэтому только костыли типа хранения указателей в QHash, как выше показано.
Как-то не пойму в чем эти костыли заключаются?


Название: Re: QString\int вместо имени винджета\функции
Отправлено: Alex Custov от Март 24, 2009, 00:25
Как-то не пойму в чем эти костыли заключаются?

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

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

А так руками храним карту соответствий, руками ищем и т.д. Костыль он и есть.


Название: Re: QString\int вместо имени винджета\функции
Отправлено: BRE от Март 24, 2009, 00:28
потому решение поставленной задачи -

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

А так руками храним карту соответствий, руками ищем и т.д. Костыль он и есть.
Аааа.  ;D
Не, хочу так.
Код
C++ (Qt)
Моя_программа()
{
   работать();
}
 


Название: Re: QString\int вместо имени винджета\функции
Отправлено: Alex Custov от Март 24, 2009, 00:33
эээ не понял.. :)


Название: Re: QString\int вместо имени винджета\функции
Отправлено: BRE от Март 24, 2009, 00:45
эээ не понял.. :)
Это я к тому, что не надо стесняться руками работу выполнять.  ;)
А выше пример идеальной программы, все остальное должен сделать компилятор.  ;D


Название: Re: QString\int вместо имени винджета\функции
Отправлено: yesrus от Март 25, 2009, 20:39
Жаль, что можно выкрутиться только хранением в Qmap :<, но все-равно всем спасибо, альфа версия проекта готова :) и хорошо, что это был именно qt...на чистом с++ (как изначально планировалось)..страшно даже подумать сколько бы это заняло...  (особенно учитывая, что я только начинаю изучать с++\qt), стало на 100% понятно почему большая часть пишет на шарпе и яве...раньше это казалось..кхм..странным  :D


Название: Re: QString\int вместо имени винджета\функции
Отправлено: Alex Custov от Март 30, 2009, 16:45
в STL тоже есть map