Russian Qt Forum

Qt => Вопросы новичков => Тема начата: comalex1 от Февраль 12, 2012, 20:00



Название: label
Отправлено: comalex1 от Февраль 12, 2012, 20:00
Ребята ,в меня такая задача:
нужно подсчитывать количество слов в тексте и я хочу чтобы оно выводило их в таком формате.Но у меня не получается создавать динамически лейбл,чтобы следуещее слово выводило под приведущим.Внимание вопрос->как это зделать?
(http://xmages.net/storage/10/1/0/f/0/upload/490ea631.jpg) (http://xmages.net/i/3361943)


Название: Re: label
Отправлено: Bepec от Февраль 12, 2012, 20:03
Самый простой - используй QGridLayout.
Создавай и запихивай в него динамические лейблы :)

Самый нормальный - сделать ModelView для отображения.

Самый сложный - сделать собственный виджет, который выполнял бы твои прихоти.


Название: Re: label
Отправлено: comalex1 от Февраль 12, 2012, 20:16
в меня не получается создавать лейблы динамически.Я просто не пойму как их добавлять циклом:типа(бред)
Код:
QLabel *label=new QLabel;
    for(int i=0;i<=n;i++)
    ui->GridLayout->addWidget( //а здесь наши  итые лейблы  );}


Название: Re: label
Отправлено: Alex Custov от Февраль 12, 2012, 20:59
в меня не получается создавать лейблы динамически.Я просто не пойму как их добавлять циклом:типа(бред)
Код:
QLabel *label=new QLabel;
    for(int i=0;i<=n;i++)
    ui->GridLayout->addWidget( //а здесь наши  итые лейблы  );}

Код
C++ (Qt)
for(int i=0;i<=n;i++)
{
   QLabel *label=new QLabel(this);
   label->setText(...);
   ui->GridLayout->addWidget(label, i, 0);
}
 


Название: Re: label
Отправлено: comalex1 от Февраль 12, 2012, 23:27
спасиба за ответы,оказалось все очень просто. :)


Название: Re: label
Отправлено: sudo от Февраль 13, 2012, 11:29
Может я не правильно понимаю цель, но если нужно просто переносить слова на следующую строку, то должно работать так:
Код:
label->setText(label->text() + "\n" + addingText);


Название: Re: label
Отправлено: Bepec от Февраль 13, 2012, 12:11
sudo, вы неправильно понимаете.
Должно соблюдаться расстояние/расположение label.

А в вашем случае будет просто перенос строки в метке.


Название: Re: label
Отправлено: andrew.k от Февраль 13, 2012, 12:28
Может я не правильно понимаю цель, но если нужно просто переносить слова на следующую строку, то должно работать так:
Код:
label->setText(label->text() + "\n" + addingText);
Судя по постановке задачи от ТС (выводить слова на отдельной строке) это даже лучше, чем лепить кучу лабелов.
Вообще мне кажется стоит взять за правило, если можно сделать одним виджетом вместо десяти, то надо делать одним.
А если нельзя сделать одним виджетом, то нужно постараться.
Тогда не будут появляться такие темы: "сделал 10тыщ виджетов и что теперь делать?"

Неизвестно конечно, какое количество слов там может быть. Но это уже нюансы.

Да. Ты правильно все понимаешь, sudo  ;D


Название: Re: label
Отправлено: Bepec от Февраль 13, 2012, 12:54
Если сделать таким подходом, как sudo, то...

При первом же значении строки, которое будет больше чем ширина между надписями, приведёт к сдвигу всей конструкции и "АЛАРМ АЛАРМ, У НАС ВСЁ РУШИТСЯ".

А  динамические лейблы будут управляться компоновщиком.


Название: Re: label
Отправлено: andrew.k от Февраль 13, 2012, 13:11
Если сделать таким подходом, как sudo, то...

При первом же значении строки, которое будет больше чем ширина между надписями, приведёт к сдвигу всей конструкции и "АЛАРМ АЛАРМ, У НАС ВСЁ РУШИТСЯ".
Так и не понял, о чем повествует это предложение. Понял только, что у кого-то "сдвинута конструкция".

А  динамические лейблы будут управляться компоновщиком.
А один большой лабел запихнуть в компоновщик видимо религия не позволяет или фобия?


Название: Re: label
Отправлено: Bepec от Февраль 13, 2012, 13:30
Поясняю.

Так как предлагает sudo - использовать 1 лейбл и тыкать /n.
Пример
Код:
h        5\n
g        9\n
Если первое значение будет больше X(в данном случае 8 пробелов), то
Код:
h12345678        5\n
g        9\n

А по условию ТСса, он хочет чтобы колонки были друг под другом.

При использовании же 2 (хотя бы) динамических лейблов даже при значении x = 10, сохранится исходная сигнатура. Благодаря компоновщику.
Код:
h1234567891        5
g                  9

PS к тому же использование многих динамических лейблов, позволит удалять/переносить/изменять нужные строки непосредственно, а не тыркаться с регэкспами в содержимое одного лейбла.


Название: Re: label
Отправлено: _OLEGator_ от Февраль 13, 2012, 13:38
Поддерживаю, один QLabel разумнее.


Название: Re: label
Отправлено: andrew.k от Февраль 13, 2012, 13:47
Поясняю.

Так как предлагает sudo - использовать 1 лейбл и тыкать /n.
Пример
Код:
h        5\n
g        9\n
Если первое значение будет больше X(в данном случае 8 пробелов), то
Код:
h12345678        5\n
g        9\n

А по условию ТСса, он хочет чтобы колонки были друг под другом.

При использовании же 2 (хотя бы) динамических лейблов даже при значении x = 10, сохранится исходная сигнатура. Благодаря компоновщику.
Код:
h1234567891        5
g                  9

PS к тому же использование многих динамических лейблов, позволит удалять/переносить/изменять нужные строки непосредственно, а не тыркаться с регэкспами в содержимое одного лейбла.

Если руки из жопы, будет именно так как ты описал, а если нет одного лабела достаточно.


Название: Re: label
Отправлено: Bepec от Февраль 13, 2012, 13:48
_OLEGator_ а как вы будете выдерживать расстояние между строками разной длины? Пробелами подгонять до нужной отметки? :)
Да и к тому же при ресайзе окна программы перерасчитывать всё? А если придётся удалить пятый сверху элемент? RegExp?


Я конечно мастер "простых" решений, но ручками переписывать минимум 4-7 функции, для получения функционала, который уже доступен...

andrew.k ты видимо уже из упоротости прёшь на танк :) Хотяяя... ты знаешь толк в извращениях.

PS я бы лично выбрал второе решение с моделькой.


Название: Re: label
Отправлено: sudo от Февраль 13, 2012, 13:49
Мужики, тут такое дело ) У меня рабочая прокся картинку порезала
Тогда всё-таки будет имхо лучше 2 лейбла, ничего никуда не поедет, сущности плодить не надо будет


Название: Re: label
Отправлено: Пантер от Февраль 13, 2012, 13:49
Юзай таблицу (QTableWidget) и не слушай никого. :)


Название: Re: label
Отправлено: Bepec от Февраль 13, 2012, 13:51
АААА....

+++ к sudo.

to Пантер: вы над ним издеваетесь? :D


Название: Re: label
Отправлено: sudo от Февраль 13, 2012, 13:52
Юзай таблицу (QTableWidget) и не слушай никого. :)

Тоже верно  :) Свойства чуток покрутить, и будет как лейбл выглядеть, если хочется


Название: Re: label
Отправлено: andrew.k от Февраль 13, 2012, 13:59
Юзай таблицу (QTableWidget) и не слушай никого. :)
"Не слушай никого", в т.ч. Пантера? :)

А вообще я не говорил, что нужно именно лабел использовать, я говорил, что должен быть один виджет, а речь шла о лабеле.
Так же я говорил, что можно достичь этого результата одним лабелом, например, использованием html.

А так я тоже за тейблвиджет, раз такие пироги )


Название: Re: label
Отправлено: _OLEGator_ от Февраль 13, 2012, 14:15
Юзай тогда сразу QTableView =)


Название: Re: label
Отправлено: Bepec от Февраль 13, 2012, 14:21
И модель и модель SQL, чтоб проще было :D


Название: Re: label
Отправлено: Bzzzuka от Апрель 14, 2012, 17:36
Как я поняла метода который бы просто добавлял в  label текст к уже имеющемуся не существует?


Название: Re: label
Отправлено: kambala от Апрель 14, 2012, 18:23
нету, но есть простое решение для этого:
Код
C++ (Qt)
QLabel *label;
QString mystring;
label->setText(label->text() + mystring);