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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Реализация облака тегов - как?  (Прочитано 11305 раз)
PavelVX
Гость
« : Сентябрь 22, 2011, 11:03 »

Подскажите, как сделать виджет типа облака тегов?
То-есть в этом виджете набор слов, по которым можно щелкать и получать значение/само слово в каком-нить слоте.
Отличный пример данного виджета стартовое окно QtCreator 2.3.0, когда выбираем начало-список меток!
Записан
Странник
Гость
« Ответ #1 : Сентябрь 22, 2011, 11:42 »

в облаке тэгов обычно еще размер шрифта к популярности привязан, с этим будет сложнее. но если вам так нравится виджет из Qt Creator - посмотрите его исходники. скорее всего реализовано через QLabel/QTextBrowser и сигнал linkActivated (каждое слово - отдельная гиперссылка).
Записан
PavelVX
Гость
« Ответ #2 : Сентябрь 22, 2011, 12:37 »

Дак в том-то и проблема, я не знаю что это за пример! И есть ли это в примерах.
Я вижу не пример, а просто виджет со ссылками при нажатии начало->(внизу справа)список меток!
На скрине это правая часть.
Записан
Pretorean
Гость
« Ответ #3 : Сентябрь 22, 2011, 12:41 »

в линуксовом креаторе этого нету, покрайнемере в 2.1 )))
попробуй QWebView и в него html. хотя может и обычной лейблы хватит
Записан
PavelVX
Гость
« Ответ #4 : Сентябрь 22, 2011, 12:54 »

такс, похоже начинаются недопонимания. Попробую объяснить задачу, может мне что-нибудь правильное и посоветуют.
Упрощенно: есть база с картинками которые тегизировали. И нужно показать все эти теги. В зависимости от того, какое слово нажали, нужно отобразить нужную картинку. Упрощенно так Улыбающийся
Конечно с разными шрифтами было бы хорошо, но просто облако бы тоже хватило. Самые распространенные теги просто пускать самыми первыми и все.
Поэтому html тут не нужен. Это я по аналогии назвал облаком тегов.
Записан
Kolobok
Гость
« Ответ #5 : Сентябрь 22, 2011, 13:27 »

QListView
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #6 : Сентябрь 22, 2011, 14:26 »

А я бы начал скрещивать вот это с этим.
Записан
PavelVX
Гость
« Ответ #7 : Сентябрь 23, 2011, 05:19 »

 Kolobok, это как?
Похоже проще будет создать тему с вопросом: опознайте виджет Улыбающийся
Записан
Bepec
Гость
« Ответ #8 : Сентябрь 23, 2011, 07:43 »

Все решается на уровне бутерброда(если не лезть в дебри и оптимизацию).

Берется словарь структур - на манер

Код:
{
QStringList label;
QPixMap picture;
}

И динамически создаешь массив надписей со словами из списка (тегов короче).
Связываешь все метки, сигнал mousePressEvent со своим слотом.
И при нажатии циклически прогоняешь по массиву картинок.
Если в
Код:
QStringList label;
содержится текст из надписи, то картинку опять таки динамически показать.
Как показывать уже сам решай.

PS решение простейшее, не претендует на элегантное.
Записан
Странник
Гость
« Ответ #9 : Сентябрь 23, 2011, 09:23 »

такс, похоже начинаются недопонимания. Попробую объяснить задачу, может мне что-нибудь правильное и посоветуют.
Упрощенно: есть база с картинками которые тегизировали. И нужно показать все эти теги. В зависимости от того, какое слово нажали, нужно отобразить нужную картинку. Упрощенно так Улыбающийся
Конечно с разными шрифтами было бы хорошо, но просто облако бы тоже хватило. Самые распространенные теги просто пускать самыми первыми и все.
Поэтому html тут не нужен. Это я по аналогии назвал облаком тегов.
html тут как раз нужен. простейший способ:
Код:
#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLabel label("<a href='tag 1'>tag 1</a> <a href='tag 2'>tag 2</a> <a href='tag 3'>tag 3</a> <a href='tag 4'>tag 4</a> <a href='tag 5'>tag 5</a> <a href='tag 6'>tag 6</a>");
    label.connect(&label, SIGNAL(linkActivated(QString)), &label, SLOT(setWindowTitle(QString)));
    label.show();

    return a.exec();
}

Записан
PavelVX
Гость
« Ответ #10 : Сентябрь 23, 2011, 09:56 »

Странник, у меня к вам 2 попутных вопроса Улыбающийся
1. Ни кого не хочу обидеть, но по количеству полезных советов, вы один из первых. Если вы в Новосибирске, то куда вам подвезти пиво? Улыбающийся
2. По существу, мой ламерский вопрос: есть n кнопок, и один слот, куда эти кнопки должны посылать сигнал о нажатии со своим индексом. Как это сделать сразу в connect? Или все равно придется писать отдельные слоты для кнопок, где делать вызовы с индексом?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Сентябрь 23, 2011, 09:58 »

2. http://doc.qt.nokia.com/4.7-snapshot/qsignalmapper.html
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Kolobok
Гость
« Ответ #12 : Сентябрь 23, 2011, 10:04 »

Kolobok, это как?
Похоже проще будет создать тему с вопросом: опознайте виджет Улыбающийся

Ставишь в QListView режим QListView::LeftToRight.
В модели определяешь роль, которая возвращает вес элемента.
Соединяешь сигнал clicked(..) вьюшки со своим слотом.
И всё. Улыбающийся
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #13 : Сентябрь 23, 2011, 10:20 »

Отличный пример данного виджета стартовое окно QtCreator 2.3.0, когда выбираем начало-список меток!
Фигово они сделали - поиска нет.
Мне больше нравится http://forum.mista.ru/find.php
На основе html можно хоть поиском воспользоваться.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Странник
Гость
« Ответ #14 : Сентябрь 29, 2011, 17:41 »

Странник, у меня к вам 2 попутных вопроса Улыбающийся
1. Ни кого не хочу обидеть, но по количеству полезных советов, вы один из первых. Если вы в Новосибирске, то куда вам подвезти пиво? Улыбающийся
2. По существу, мой ламерский вопрос: есть n кнопок, и один слот, куда эти кнопки должны посылать сигнал о нажатии со своим индексом. Как это сделать сразу в connect? Или все равно придется писать отдельные слоты для кнопок, где делать вызовы с индексом?
далеко мне до Новосибирска, спасибом обойдусь = ) что касается кнопок, то можно и QSignalMapper использовать, как советовали выше, а можно просто в слоте через метод sender() получать указатель на объект-отправитель и запрашивать его индекс. у QAction есть удобная пара методов data() и setData(), в случае обычных виджетов можно использовать objectName().
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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