• 6380阅读
  • 4回复

请教qt4中实现图片的自动播放功能遇到的问题 [复制链接]

上一主题 下一主题
离线fmli1
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-15
以下程序是实现图片自动播放的,但是,make之后,为什么会出现“Segmentation fault”呢?  哪位高手指教一下![root@localhost imagewindow]# ./imagewindow
Segmentation fault

//头文件
#ifndef IMAGEWINDOW_H
#define IMAGEWINDOW_H

#include<QtGui>
#include<QMainWindow>
class Imagewindow :public QMainWindow
{
    Q_OBJECT
    public:
        Imagewindow() ;
    public slots:
        void autoplay();
    private:
        void createActions() ;
        void createToolBars();
        QStringList imageList ;
        int index ;
        QDir imageDir ;
        QToolBar *operToolBar;
        QAction *autoplayAct;
        QScrollArea *scrollArea ;
        QLabel *image;
};

#endif
~      
//实现程序
Imagewindow::Imagewindow()
{
    image = new QLabel(this);
    scrollArea = new QScrollArea ;
    scrollArea -> setWidget(image);
    setCentralWidget(scrollArea);
    createActions();
    createToolBars();
    imageDir.setPath("/mnt/hgfs/shareimage") ;
    QStringList filter ;
    filter << "*.jpg" << "*.bmp" << "*.jpeg" << "*.png" << "*.xpm" ;
    imageList = imageDir.entryList(filter, QDir::Files |QDir::NoSymLinks,QDir::Name) ;
    image->setPixmap(imageDir.absolutePath() + QDir::separator()+ imageList.at(0)) ;
    index = 0 ;
}

void Imagewindow::autoplay()
{
    unsigned long i ;
    unsigned long j ;
    QTime t;
     t.start();

    while(1)
    {
        if(t.elapsed() % 5000 == 0)
        {
            qDebug("\nready to show picture!index=%d\n",index);  //这个打印信息没错,能循环累加
            if(index < imageList.size()-1 )
            {
                index ++ ;
                  image->setPixmap(imageDir.absolutePath()+QDir::separator()+ imageList.at(index)) ;
                update();
            }
            else
            {
                index = 0;
                image->setPixmap(imageDir.absolutePath() +"/"+ imageList.at(0)) ;
                update();
            }

        }
    }
}


void Imagewindow::createActions()
{
    autoplayAct = new QAction(QIcon("./images/apply.png"),tr("Autoplay"),this) ;
    connect(autoplayAct,SIGNAL(triggered()),this,SLOT(autoplay())) ;
}

void Imagewindow::createToolBars()
{
    operToolBar = addToolBar(tr("operation"));
    operToolBar -> addAction(autoplayAct) ;
}

//主程序
#include<QtGui>
#include<imagewindow.h>

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

        Imagewindow *pWidget = new Imagewindow;
        pWidget->resize(300, 300);
        pWidget->show();

        return app.exec();
    }
快乐每一天!
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-15
断错误没看出来,不过建议你先把里面的死循环去掉吧
离线fmli1

只看该作者 2楼 发表于: 2009-12-15
经过一轮修改,编译通过了,运行的时候确显示不了图片!
死循环这个问题也改不了啊!!

本来是想做一个图片自动循环播放程序的,但是......
快乐每一天!
离线dbzhang800

只看该作者 3楼 发表于: 2009-12-15
引用第2楼fmli1于2009-12-15 22:06发表的  :
经过一轮修改,编译通过了,运行的时候确显示不了图片!
死循环这个问题也改不了啊!!
本来是想做一个图片自动循环播放程序的,但是......

死循环是绝对不能存在的,和Gui线程绝对不用sleep函数一样。

应该考虑使用 QTimer
离线woshiisp
只看该作者 4楼 发表于: 2011-02-18
遇到同样问题正在郁闷呢 不知道怎么解决
QT~想要爱你不容易啊!不容易 也要 爱 哈哈哈
快速回复
限100 字节
 
上一个 下一个