• 6412阅读
  • 6回复

QT中的sleep [复制链接]

上一主题 下一主题
离线banyibanyi
 

只看楼主 倒序阅读 楼主  发表于: 2010-02-25
我想在文件对话框选一堆文件,然后文件名一次显示在LABEL上,每个显示之间间隔一定时间,我是这么写的,但是最后结果只显示了最后的那个文件名,不知道哪不对,大家指正,谢谢

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QThread>
#include <QFileDialog>
class mySleep:public QThread
{
     public:
     static void msleep(unsigned long msecs)
     {
         QThread::msleep(msecs);
     }

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

     QLabel *label = new QLabel("<center>FileDialog</center>");
     label->setWindowTitle("FileDialog");
     label->resize(500, 100);

     label->setFont(QFont( "Times", 18, QFont::Bold ));
     label->show();

     QFileDialog* dialog = new QFileDialog(label);

     dialog->setDirectory("C:\\");
     dialog->setFileMode(QFileDialog::ExistingFiles);
     dialog->setFilter("files (*)");
     dialog->setViewMode(QFileDialog::Detail);


     if (dialog->exec() == QDialog::Accepted) {
         QStringList fileNames = dialog->selectedFiles();
         QStringListIterator iterator(fileNames);
         while(iterator.hasNext()) {

             label->setText("<center>" + iterator.next() + "</center>");
             mySleep::msleep(100);
         }  
     }  

     return app.exec();
}

离线XChinux

只看该作者 1楼 发表于: 2010-02-25
你每次循环都是setText(),当然最后只显示最后一个文件名了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线banyibanyi

只看该作者 2楼 发表于: 2010-02-25
中间不应该是停顿的显示第一个 然后睡一下 再显示第二个吗
离线XChinux

只看该作者 3楼 发表于: 2010-02-25
在setText()后加上一句:
QApplication::processEvents();
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线banyibanyi

只看该作者 4楼 发表于: 2010-02-25
谢谢版主,什么时候需要这么写呢?
离线banyibanyi

只看该作者 5楼 发表于: 2010-02-25
我在网上查了一下说是当一个事务需要耗费时间时调用,例如保存文件时候调用就能在没保存完的情况下相应界面绘制。
那我这时就不太明白了,我在label打出字,然后睡眠一会不需要类似多线程的操作啊,只是等睡完了再打字啊,希望版主大人
给与解答。
离线hercules

只看该作者 6楼 发表于: 2010-02-25
f (dialog->exec() == QDialog::Accepted) {
         QStringList fileNames = dialog->selectedFiles();
         QStringListIterator iterator(fileNames);
         while(iterator.hasNext()) {
             QString text = label->text() + iterator.next();
             label->setText("<center>" + text+ "</center>");
             qApp->processEvents();
             mySleep::msleep(100);
         }  
     }  
我的QQ号:337396132
欢迎大家加我为好友,一起学习Qt
快速回复
限100 字节
 
上一个 下一个