Russian Qt Forum
Мая 07, 2025, 18:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: label  (Прочитано 9686 раз)
comalex1
Гость
« : Февраля 12, 2012, 20:00 »

Ребята ,в меня такая задача:
нужно подсчитывать количество слов в тексте и я хочу чтобы оно выводило их в таком формате.Но у меня не получается создавать динамически лейбл,чтобы следуещее слово выводило под приведущим.Внимание вопрос->как это зделать?
Записан
Bepec
Гость
« Ответ #1 : Февраля 12, 2012, 20:03 »

Самый простой - используй QGridLayout.
Создавай и запихивай в него динамические лейблы Улыбающийся

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

Самый сложный - сделать собственный виджет, который выполнял бы твои прихоти.
Записан
comalex1
Гость
« Ответ #2 : Февраля 12, 2012, 20:16 »

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

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Февраля 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);
}
 
Записан
comalex1
Гость
« Ответ #4 : Февраля 12, 2012, 23:27 »

спасиба за ответы,оказалось все очень просто. Улыбающийся
Записан
sudo
Гость
« Ответ #5 : Февраля 13, 2012, 11:29 »

Может я не правильно понимаю цель, но если нужно просто переносить слова на следующую строку, то должно работать так:
Код:
label->setText(label->text() + "\n" + addingText);
Записан
Bepec
Гость
« Ответ #6 : Февраля 13, 2012, 12:11 »

sudo, вы неправильно понимаете.
Должно соблюдаться расстояние/расположение label.

А в вашем случае будет просто перенос строки в метке.
Записан
andrew.k
Гость
« Ответ #7 : Февраля 13, 2012, 12:28 »

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

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

Да. Ты правильно все понимаешь, sudo  Смеющийся
Записан
Bepec
Гость
« Ответ #8 : Февраля 13, 2012, 12:54 »

Если сделать таким подходом, как sudo, то...

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

А  динамические лейблы будут управляться компоновщиком.
Записан
andrew.k
Гость
« Ответ #9 : Февраля 13, 2012, 13:11 »

Если сделать таким подходом, как sudo, то...

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

А  динамические лейблы будут управляться компоновщиком.
А один большой лабел запихнуть в компоновщик видимо религия не позволяет или фобия?
Записан
Bepec
Гость
« Ответ #10 : Февраля 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 к тому же использование многих динамических лейблов, позволит удалять/переносить/изменять нужные строки непосредственно, а не тыркаться с регэкспами в содержимое одного лейбла.
« Последнее редактирование: Февраля 13, 2012, 13:32 от Bepec » Записан
_OLEGator_
Гость
« Ответ #11 : Февраля 13, 2012, 13:38 »

Поддерживаю, один QLabel разумнее.
Записан
andrew.k
Гость
« Ответ #12 : Февраля 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 к тому же использование многих динамических лейблов, позволит удалять/переносить/изменять нужные строки непосредственно, а не тыркаться с регэкспами в содержимое одного лейбла.

Если руки из жопы, будет именно так как ты описал, а если нет одного лабела достаточно.
Записан
Bepec
Гость
« Ответ #13 : Февраля 13, 2012, 13:48 »

_OLEGator_ а как вы будете выдерживать расстояние между строками разной длины? Пробелами подгонять до нужной отметки? Улыбающийся
Да и к тому же при ресайзе окна программы перерасчитывать всё? А если придётся удалить пятый сверху элемент? RegExp?


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

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

PS я бы лично выбрал второе решение с моделькой.
Записан
sudo
Гость
« Ответ #14 : Февраля 13, 2012, 13:49 »

Мужики, тут такое дело ) У меня рабочая прокся картинку порезала
Тогда всё-таки будет имхо лучше 2 лейбла, ничего никуда не поедет, сущности плодить не надо будет
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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