• 6288阅读
  • 1回复

请教qt4中做到图片的自动播放功能的程序分析? [复制链接]

上一主题 下一主题
离线fmli1
 

只看楼主 正序阅读 楼主  发表于: 2009-12-14
请问哪位可以分析一下以下程序(网友的)?  红色部分使用正确吗?

qt4中如何做到图片的自动播放功能?
我想实现的功能是:读取在一个文件夹中的所有图片,并每隔2s显示下一张图片。我是用sleep(2)来实现的。但程序运行后,点击“自动播放按钮”,就死在那不动了。qt4不能用sleep函数吗?还是哪出啥问题了?如果不能的话,那应该用什么函数?

/*类的声明*/
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 ;
       Imageviewer *image;};


/*类的定义*/
Imagewindow::Imagewindow()
{
/*自已定义的专门用来显示图片的窗口的类,它改写了paintEvent 函数,这个类我测过,没问题的*/
    image = new Imageviewer;    
    scrollArea = new QScrollArea ;
    scrollArea -> setWidget(image);
    setCentralWidget(scrollArea);
    createActions();
    createToolBars();
    imageDir.setPath("/mnt/hgfs/share_file/qt_image") ;
    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()   //自动播放功能
{
    while(1)
    {
        if(index < imageList.size()-1 )
        {
         image->setPixmap(imageDir.absolutePath() +QDir::separator()+ imageList.at(index)) ;
        index ++ ;
        }
        else
            index = 0;
        sleep(2) ;   //问题所在
    }
}

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) ; //自动播放按钮
}


int main(int argc, char *argv[])
    {    
        QApplication app(argc, argv);        
        
        Imagewindow *pWidget = new Imagewindow;
        pWidget->resize(300, 300);
        pWidget->show();
        
        return app.exec();
}
快乐每一天!
离线不要多話
只看该作者 1楼 发表于: 2009-12-15
QTimer *timer =new QTimer(this);
timer->start(2000); //2秒

connect(timer,SIGNAL(timeout()),this,SLOT(autoplay()));
快速回复
限100 字节
 
上一个 下一个