Russian Qt Forum

Qt => Общие вопросы => Тема начата: Chester от Январь 19, 2010, 16:08



Название: Помогите с созданием неограниченного числа QLabel
Отправлено: 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("");
}
 
только как теперь к ним обратиться??


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: BRE от Январь 19, 2010, 16:21
Не уверен в удачности такого решения... но

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

Для чего использовать setGeometry?
Почитай на тему Layout Management.


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: crossly от Январь 19, 2010, 17:34
поясни подробнее ... для чего к ним обращаться... как правило лэйбл используется только для отображения..


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: whirlwind от Январь 19, 2010, 17:51
в принципе, можно в том же QList<QLabel*>  запомнить, потом по индексу получать нужный указатель


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: DS_tm от Январь 19, 2010, 18:29
Нет смысла в установке имени, лучший вариан использовать QList<QLabel *> если последовательность не меняеться (и для доступа использовать индекс) или QHash<int, QLabel *> (и для доступа использовать ид).
По поводу расположения надо использовать вертикальный лайоут.


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


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: MoPDoBoPoT от Январь 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) {
      ...
}
 
[/оффтоп]


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: crossly от Январь 19, 2010, 19:50
если заглянуть в исходники то расчетов там как таковых нету.... row()+1  и всего то...


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: DS_tm от Январь 20, 2010, 10:27
если заглянуть в исходники то расчетов там как таковых нету.... row()+1  и всего то...

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

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

Исключение из привил, при условии, что count используеться за приделами цикла, тогда использую вариант с заранее определенной переменой.


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: niXman от Январь 20, 2010, 10:41
а самое интересное это то, что ТС так ни разу не отписался. цирк да и только ;)


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: Chester от Январь 20, 2010, 13:43
Спасибо всем за ответы...Я так понимаю,что если у меня,например, есть виджеты,которые отличаются последней цифрой в имени: row_1, row_2, row_3 и т.д.,то я никак в цикле не могу обратиться к ним :-((

Например,сделать что-то типо
Код
C++ (Qt)
for(int i=1;i<10;i++)
  ui.row_i->setText(""+i+"");
 


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: crossly от Январь 20, 2010, 14:43
тут бы я отправил читать литературу по с++


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: Chester от Январь 20, 2010, 14:52
Я понимаю,что так нельзя сделать ))))
Я имею ввиду как можно в таком случае в цикле обратиться к конкретному виджету...а пример конечно неудачный


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: Kolobok от Январь 20, 2010, 15:27
Использовать QLabel's для отображения таблицы БД это изврат. Можно узнать о причинах, побудивших к такому решению. Чем QTableView не устраивает?


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: crossly от Январь 20, 2010, 15:29
Я понимаю,что так нельзя сделать ))))
Я имею ввиду как можно в таком случае в цикле обратиться к конкретному виджету...а пример конечно неудачный
по objectname....


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: Marat(Qt) от Январь 20, 2010, 19:37
Код:
QVector<QLabel *> vec;
for(int i=0;i<dohod->rowCount();i++){
       QLabel *label;
       label=new QLabel(ui.frame);
       label->setGeometry(QRect(10,(i+1)*48-20, 46, 14));
       str->setText("");
       vec<<label;
}
vec.at(5)->text();//текст из шестого лейбла
почему бы так не сделать? Хотя как то это... кхм... странно


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: lit-uriy от Январь 20, 2010, 20:49
вообще советы, по моему, зряшние. Если человека не устраивает табличное представление, то надо смотреть в сторону QDataWidgetMapper, а куча меток связанных с БД, это предел извращения.


Название: Re: Помогите с созданием неограниченного числа QLabel
Отправлено: SABROG от Январь 20, 2010, 20:54
Если нужно выводить только текст без рюшечек и прочих вкусностей QLabel'a, то тут хватит связки CustomWidget + QStringList + paintEvent() + drawText(). Обращаться к элементам соответственно через контейнер QStringList, можно конечно и через QVariantList замутить. И рисовать этот текст как душе вздумается, хоть вверх ногами, хоть в столбик, хоть с viewport'ом и скроллбарами. Не зная задачи не дать конкретного совета.

Цитировать
а пример конечно неудачный

Так это пример или задача такая? В итоге всё сводиться к тому, чтобы обратиться к случайному элементу на виджете и БД тут ни при чем?