先上附件
源代码 FavIcon.tar.gz (0 K) 下载次数:29 :
以下是核心代码:
#ifndef H_DLGFAVICON_H
#define H_DLGFAVICON_H
#include <QDialog>
#include <QHttp>
#include <QUrl>
#include <QDebug>
#include <QMessageBox>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QFile>
#include <QTemporaryFile>
#include "ui_DisplayFavIcon.h"
class DlgFavIcon: public QDialog
{
Q_OBJECT
public:
DlgFavIcon():QDialog()
{
finished= false;
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()),
this, SLOT(displayIcon()));
connect(&http, SIGNAL(requestFinished(int, bool)),
this, SLOT(workFinished(int, bool)));
}
private:
QHttp http;
QUrl url;
// QTemporaryFile file;
QPixmap pixmap;
Ui_Dialog ui;
bool finished;
private slots:
void displayIcon()
{
QFile file("a.ico");
if (!file.open(QIODevice::ReadWrite))
{
QMessageBox::information(0, "", "File Open Failed");
return;
}
url.setUrl("
http://www.163.com/favicon.ico");
http.setHost(url.host());
http.get(url.path(), &file);
/* while (not finished) { sleep(3); }*///如果死循环等待的话,总是会阻塞在这个地方
//QHttp的异步好像不是通过多线程实现的,那么QT//中有没有类似Delphi的ProcessMessages方法呢? if (file.size() == 0)
{
QMessageBox::information(0, "Information", "file not down!");
return;
}
else
QMessageBox::information(0, "Information", "file down!");
// ui.pushButton->setIcon(QIcon(QPixmap("a.bmp")));
//在Ubuntu中,需要手动把icon图标转换成bmp图片格式才能够正常加载显示 ui.pushButton->setIcon(QIcon("a.ico"));
//在Windows中直接加载Icon图标就可以了 }
void workFinished ( int id, bool error )
{
if (error)
QMessageBox::information(0, "Information", http.errorString());
finished = true;
}
void workDone(bool error)
{
finished = true;
if (error)
QMessageBox::information(0, "Information", http.errorString());
}
};
#endif
现整理两个问题,如下:1. QT有没有方法在死婚环中检查消息队列,并处理消息的方法? 在Delphi中是Application.ProcessMessages方法2. Linux下要怎么加载Icon?通过QIcon不能正常加载,但是同样的代码在Windows下面没有问题。 Linux下我通过apt-get install 方式安装的Qt4,不是自己编译的源代码,不知道会不会和这有关系[ 此帖被wvins在2009-05-25 15:03重新编辑 ]