Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: PavelVX от Сентябрь 22, 2011, 11:03



Название: Реализация облака тегов - как?
Отправлено: PavelVX от Сентябрь 22, 2011, 11:03
Подскажите, как сделать виджет типа облака тегов?
То-есть в этом виджете набор слов, по которым можно щелкать и получать значение/само слово в каком-нить слоте.
Отличный пример данного виджета стартовое окно QtCreator 2.3.0, когда выбираем начало-список меток!


Название: Re: Реализация облака тегов - как?
Отправлено: Странник от Сентябрь 22, 2011, 11:42
в облаке тэгов обычно еще размер шрифта к популярности привязан, с этим будет сложнее. но если вам так нравится виджет из Qt Creator - посмотрите его исходники. скорее всего реализовано через QLabel/QTextBrowser и сигнал linkActivated (каждое слово - отдельная гиперссылка).


Название: Re: Реализация облака тегов - как?
Отправлено: PavelVX от Сентябрь 22, 2011, 12:37
Дак в том-то и проблема, я не знаю что это за пример! И есть ли это в примерах.
Я вижу не пример, а просто виджет со ссылками при нажатии начало->(внизу справа)список меток!
На скрине это правая часть.


Название: Re: Реализация облака тегов - как?
Отправлено: Pretorean от Сентябрь 22, 2011, 12:41
в линуксовом креаторе этого нету, покрайнемере в 2.1 )))
попробуй QWebView и в него html. хотя может и обычной лейблы хватит


Название: Re: Реализация облака тегов - как?
Отправлено: PavelVX от Сентябрь 22, 2011, 12:54
такс, похоже начинаются недопонимания. Попробую объяснить задачу, может мне что-нибудь правильное и посоветуют.
Упрощенно: есть база с картинками которые тегизировали. И нужно показать все эти теги. В зависимости от того, какое слово нажали, нужно отобразить нужную картинку. Упрощенно так :)
Конечно с разными шрифтами было бы хорошо, но просто облако бы тоже хватило. Самые распространенные теги просто пускать самыми первыми и все.
Поэтому html тут не нужен. Это я по аналогии назвал облаком тегов.


Название: Re: Реализация облака тегов - как?
Отправлено: Kolobok от Сентябрь 22, 2011, 13:27
QListView


Название: Re: Реализация облака тегов - как?
Отправлено: alex312 от Сентябрь 22, 2011, 14:26
А я бы начал скрещивать вот это (http://doc.qt.nokia.com/4.8-snapshot/animation-animatedtiles.html) с этим (http://doc.qt.nokia.com/4.8-snapshot/qgraphicstextitem.html).


Название: Re: Реализация облака тегов - как?
Отправлено: PavelVX от Сентябрь 23, 2011, 05:19
 Kolobok, это как?
Похоже проще будет создать тему с вопросом: опознайте виджет :)


Название: Re: Реализация облака тегов - как?
Отправлено: Bepec от Сентябрь 23, 2011, 07:43
Все решается на уровне бутерброда(если не лезть в дебри и оптимизацию).

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

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

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

PS решение простейшее, не претендует на элегантное.


Название: Re: Реализация облака тегов - как?
Отправлено: Странник от Сентябрь 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();
}



Название: Re: Реализация облака тегов - как?
Отправлено: PavelVX от Сентябрь 23, 2011, 09:56
Странник, у меня к вам 2 попутных вопроса :)
1. Ни кого не хочу обидеть, но по количеству полезных советов, вы один из первых. Если вы в Новосибирске, то куда вам подвезти пиво? :)
2. По существу, мой ламерский вопрос: есть n кнопок, и один слот, куда эти кнопки должны посылать сигнал о нажатии со своим индексом. Как это сделать сразу в connect? Или все равно придется писать отдельные слоты для кнопок, где делать вызовы с индексом?


Название: Re: Реализация облака тегов - как?
Отправлено: Пантер от Сентябрь 23, 2011, 09:58
2. http://doc.qt.nokia.com/4.7-snapshot/qsignalmapper.html (http://doc.qt.nokia.com/4.7-snapshot/qsignalmapper.html)


Название: Re: Реализация облака тегов - как?
Отправлено: Kolobok от Сентябрь 23, 2011, 10:04
Kolobok, это как?
Похоже проще будет создать тему с вопросом: опознайте виджет :)

Ставишь в QListView режим QListView::LeftToRight.
В модели определяешь роль, которая возвращает вес элемента.
Соединяешь сигнал clicked(..) вьюшки со своим слотом.
И всё. :)


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


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


Название: Re: Реализация облака тегов - как?
Отправлено: gil9red от Ноябрь 10, 2013, 13:02
Update! ;D
http://developer.nokia.com/Community/Wiki/QML_Tag_Cloud