Russian Qt Forum
Июнь 15, 2024, 21:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: label  (Прочитано 8941 раз)
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.122 секунд. Запросов: 22.