当前位置:编程学习 > wap >>

QListView如何显示动态图片(.gif)?

现定义了一个继承QItemDelegate的子类,重写了paint函数,得到了图片路径,可怎么让这张图片显示出来
请各位帮忙解决下,谢谢 --------------------编程问答-------------------- --------------------编程问答-------------------- QItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index)
{
 QPixmap bmp("E:/xx.jpg");
 p.drawPixmap(option.rect(), bmp);
}  --------------------编程问答-------------------- p.drawPixmap(option.rect(), bmp);
这个函数将这个图片显示出来了,但图片是静态的,我现在是需要显示一张gif格式的动态图片 --------------------编程问答-------------------- 试试 QMovie ? --------------------编程问答-------------------- QMovie好像只能用在QLabel上,对于QListView不知道怎么用,希望能给个例子,谢谢 --------------------编程问答-------------------- 看看 QT 的例子 Spin Box Delegate


QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const
{
    QSpinBox *editor = new QSpinBox(parent); //这里改QLabel ,setEditorData等都改
    editor->setMinimum(0);
    editor->setMaximum(100);

    return editor;
}


你自己 试试 --------------------编程问答-------------------- .h文件的相关内容:
void paintEvent(QPaintEvent *e);//重载绘制函数
protected slots:
    void imageChanged(); //声明槽函数
private:
    Ui::Widget *ui;
    QMovie *movie;   //QMovie变量
    QImage currentImage; //保存当前帧图象

构造函数:
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    movie = new QMovie(this);
    movie->setFileName("F:/pig.gif");//初始化
    connect(movie,SIGNAL(frameChanged(int)),this,SLOT(imageChanged()));//信号连接
    movie->start();

}
槽函数:
void Widget::imageChanged()
{
    currentImage = movie->currentImage();//获取GIF中的当前帧(图像)
    this->update(0,0,currentImage.width(),currentImage.height());//立即重绘
}
重绘函数:
void Widget::paintEvent(QPaintEvent *e)
{
    QPainter p(this);
    p.drawImage(0, 0, currentImage);//将movie中的当前帧的图像画到Widget 0,0的位置
}

利用这个方法可以封装一个类似于VC的Picture和C#的PictureBox控件来 --------------------编程问答--------------------
引用 6 楼 fetionone 的回复:
看看 QT 的例子 Spin Box Delegate


C/C++ code

QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const……


我试了你给我的方法,对listview也做了一个delegate类,根据我的试验正常情况下没有显示图片,但我看了网上的评论说这个是在编辑状态下才能出现这个控件,不知该怎么办,请教下 --------------------编程问答-------------------- 回复7楼:
    你的方法我想只适合显示有限的几张图片,但现在是一个listview,我不知道它具体要显示几张gif图片,所以感觉不太适合,谢谢 --------------------编程问答-------------------- mark~~~~~ --------------------编程问答-------------------- 先获取QModelIndex
再使用openPersistentEditor 

补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,