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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Помогите с созданием неограниченного числа QLabel  (Прочитано 9837 раз)
Chester
Гость
« : Январь 19, 2010, 16:08 »

Доброго времени суток!!!!
Нужно создать такое количество QLabel, сколько строчек в таблице БД...т.е. чтобы в этих label-ах были данные из таблицы и чтобы в дальнейшем можно было бы к ним обращаться
Делаю таким образом:
Код
C++ (Qt)
for(int i=0;i<dohod->rowCount();i++){
      QLabel *label;
      label=new QLabel(ui.frame);
      label->setObjectName("label_"+st.setNum(num)+"");
      label->setGeometry(QRect(10,(i+1)*48-20, 46, 14));
      str->setText("");
}
 
только как теперь к ним обратиться??
Записан
BRE
Гость
« Ответ #1 : Январь 19, 2010, 16:21 »

Не уверен в удачности такого решения... но

Искать QLabel по имени можно используя QObject::findChildren:
QList<QLabel*> labels = findChildren<QLabel*>( "label_1" );
Получайшь список всех меток с нужным именем.

Для чего использовать setGeometry?
Почитай на тему Layout Management.
Записан
crossly
Гость
« Ответ #2 : Январь 19, 2010, 17:34 »

поясни подробнее ... для чего к ним обращаться... как правило лэйбл используется только для отображения..
Записан
whirlwind
Гость
« Ответ #3 : Январь 19, 2010, 17:51 »

в принципе, можно в том же QList<QLabel*>  запомнить, потом по индексу получать нужный указатель
Записан
DS_tm
Гость
« Ответ #4 : Январь 19, 2010, 18:29 »

Нет смысла в установке имени, лучший вариан использовать QList<QLabel *> если последовательность не меняеться (и для доступа использовать индекс) или QHash<int, QLabel *> (и для доступа использовать ид).
По поводу расположения надо использовать вертикальный лайоут.
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #5 : Январь 19, 2010, 19:05 »

*upd*
Возможны проблемы с производительностью.
Не быстрые операции - new QLabel и особенно QLabel.setText("Какойто html").
При большом к-ве label будет заметно.
Может на  QGraphicsScene организовать?
Записан
MoPDoBoPoT
Гость
« Ответ #6 : Январь 19, 2010, 19:38 »

А чем MVC не устраивает?

[оффтоп]
Код
C++ (Qt)
for(int i=0;i<dohod->rowCount();i++){
      ...
}
 
dohod->rowCount() будет высчитываться при каждой итерации, лучше посчитать один раз до цикла:
Код
C++ (Qt)
int count = dohod->rowCount();
for (int i = 0; i < count; ++i) {
      ...
}
 
[/оффтоп]
Записан
crossly
Гость
« Ответ #7 : Январь 19, 2010, 19:50 »

если заглянуть в исходники то расчетов там как таковых нету.... row()+1  и всего то...
Записан
DS_tm
Гость
« Ответ #8 : Январь 20, 2010, 10:27 »

если заглянуть в исходники то расчетов там как таковых нету.... row()+1  и всего то...

OFFTOPIC:
Маловолнующий фактор). Этика есть этика. В свою очередь предложу вариант в одну строчку, которым пользуюсь постоянно, в независимости от сложности функции в условии(ведь реализация функции всегда может быть изменена).

Код
C++ (Qt)
for (int i = 0, count = dohod->rowCount(); i < count; ++i)
 

Исключение из привил, при условии, что count используеться за приделами цикла, тогда использую вариант с заранее определенной переменой.
Записан
niXman
Гость
« Ответ #9 : Январь 20, 2010, 10:41 »

а самое интересное это то, что ТС так ни разу не отписался. цирк да и только Подмигивающий
Записан
Chester
Гость
« Ответ #10 : Январь 20, 2010, 13:43 »

Спасибо всем за ответы...Я так понимаю,что если у меня,например, есть виджеты,которые отличаются последней цифрой в имени: row_1, row_2, row_3 и т.д.,то я никак в цикле не могу обратиться к ним :-((

Например,сделать что-то типо
Код
C++ (Qt)
for(int i=1;i<10;i++)
  ui.row_i->setText(""+i+"");
 
Записан
crossly
Гость
« Ответ #11 : Январь 20, 2010, 14:43 »

тут бы я отправил читать литературу по с++
Записан
Chester
Гость
« Ответ #12 : Январь 20, 2010, 14:52 »

Я понимаю,что так нельзя сделать ))))
Я имею ввиду как можно в таком случае в цикле обратиться к конкретному виджету...а пример конечно неудачный
Записан
Kolobok
Гость
« Ответ #13 : Январь 20, 2010, 15:27 »

Использовать QLabel's для отображения таблицы БД это изврат. Можно узнать о причинах, побудивших к такому решению. Чем QTableView не устраивает?
Записан
crossly
Гость
« Ответ #14 : Январь 20, 2010, 15:29 »

Я понимаю,что так нельзя сделать ))))
Я имею ввиду как можно в таком случае в цикле обратиться к конкретному виджету...а пример конечно неудачный
по objectname....
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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