Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Анимация в QTextEdit

Автор: kibsoft 19.3.2010, 19:03

Нужно вставить gif файл в QTextEdit, чтобы воспроизводилась анимация, insertImage и явная вставка HTML не помогает - вставляется статическая картинка. Можно ли как нибудь тогда в QTextEdit вставить в нужных местах QLabel с установленным QMovie? Если да, то как это сделать?

Автор: kibsoft 19.3.2010, 21:23

Погуглил, понигмил, поассистентил, в итоге планирую перебраться на WebKit..

Да, а сделал вывод вот почему:

Цитата
170585 - QTextBrowser gif animation
Description
Add support for animated gifs and mngs in QTextEdit.

Won't fix:
We will not add this feature to QTextBrowser, as we don't aim for HTML compliance. Our new WebKit based HTML rendering component we are working on for Qt 4.4 will solve this a lot better.

http://qt.nokia.com/developer/task-tracker/index_html?method=entry&id=170585

Автор: kibsoft 21.3.2010, 13:29

Может быть кто-то не понял к чему в предыдущем посте я писал про QTextBrowser - просто в приложении он у меня тоже есть. А вот что я накопал в кэше гугла на qtcentre(странно, но на в qtcenter wiki страница не находится, а в кэше гугла сохранилась. Слава ГУГЛУ!), привожу код:

// main.cpp
#include <QtGui>

class AnimatedTextEdit : public QTextEdit
{
    Q_OBJECT

public:
    AnimatedTextEdit(QWidget* parent = 0)
        : QTextEdit(parent) { }

    void addAnimation(const QUrl& url, const QString& fileName)
    {
        QMovie* movie = new QMovie(this);
        movie->setFileName(fileName);
        urls.insert(movie, url);
        connect(movie, SIGNAL(frameChanged(int)), this, SLOT(animate()));
        movie->start();
    }

private slots:
    void animate()
    {
        if (QMovie* movie = qobject_cast<QMovie*>(sender()))
        {
            document()->addResource(QTextDocument::ImageResource,
                urls.value(movie), movie->currentPixmap());
            setLineWrapColumnOrWidth(lineWrapColumnOrWidth()); // causes reload
        }
    }

private:
    QHash<QMovie*, QUrl> urls;
};

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    AnimatedTextEdit textEdit;
    textEdit.setHtml("<img src='bart-url'/><img src='homer-url'/>");
    textEdit.addAnimation(QUrl("bart-url"), "bart.gif");
    textEdit.addAnimation(QUrl("homer-url"), "homer.gif");
    textEdit.show();
    return app.exec();
}

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)