我照着《精通qt4编程》一书的第六章的一个图片浏览器的代码,自己去掉了一些功能,只实现基本的浏览,但是就是不能显示图片,代码如下,大家帮我找找问题好吗?谢了先。。。
imgwidget.h
================================================================================================
#ifndef imgwidget_h
#define imgwidget_h
#include <QtGui>
class ImageWidget:public QWidget
{
Q_OBJECT
public:
bool fit;
qreal scale;
ImageWidget(QWidget* parent=0);
void setPixmap(QString filename);
protected:
void paintEvent(QPaintEvent *pevent);
private:
QPixmap pixmap;
};
#endif
================================================================================================
imgwidget.cpp
================================================================================================
#include <QtCore>
#include <QtDebug>
#include "imgwidget.h"
ImageWidget::ImageWidget(QWidget* parent)
:QWidget(parent)
{
QDesktopWidget desktop;
pixmap=QPixmap(desktop.width(),desktop.height());
scale=1;
fit=true;
}
void ImageWidget::paintEvent(QPaintEvent *pevent)
{
QPainter painter(this);
if(fit)
{
QPixmap fitpixmap=pixmap.scaled(width(),height(),Qt::KeepAspectRatio);
painter.drawPixmap(0,0,fitpixmap);
}
else
painter.drawPixmap(0,0,pixmap);
}
void ImageWidget::setPixmap(QString filename)
{
pixmap.load(filename);
update();
}
================================================================================================
mainwin.h
================================================================================================
#ifndef mainwin_h
#define mainwin_h
#include <QMainWindow>
#include <QScrollArea>
#include <QDir>
#include "imgwidget.h"
class mainwin:public QMainWindow
{
Q_OBJECT
public:
mainwin();
public slots:
void selectdir();
void next();
void prev();
private:
void createActions();
void createMenu();
void createToolbar();
void createStatusbar();
QScrollArea *scrollArea;
ImageWidget* imgWidget;
QMenu *navimenu;
QToolBar *navitoolbar;
QAction *dirAct;
QAction *nextAct;
QAction *prevAct;
QStringList imglist;
int index;
QDir imgdir;
};
#endif
================================================================================================
mainwin.cpp
================================================================================================
#include <QtGui>
#include "mainwin.h"
mainwin::mainwin()
{
imgWidget=new ImageWidget;
scrollArea=new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
imgWidget->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
scrollArea->setWidget(imgWidget);
scrollArea->widget()->setMaximumSize(640,480);
setCentralWidget(scrollArea);
createActions();
createMenu();
createToolbar();
createStatusbar();
setWindowTitle(tr("picbrowser"));
setFocusPolicy(Qt::StrongFocus);
index=0;
imgdir.setPath(QDir::currentPath());
QStringList filter;
filter<<"*.jpg"<<"*.bmp"<<"*.jpeg"<<"*.png";
imglist=imgdir.entryList(filter,QDir::Files);
next();
}
void mainwin::createActions()
{
dirAct=new QAction(QIcon(":/image/open.png"),tr("open"),this);
dirAct->setShortcut(QKeySequence::Open);
connect(dirAct,SIGNAL(triggered()),this,SLOT(selectdir()));
prevAct=new QAction(QIcon(":/image/previous.png"),tr("previous"),this);
prevAct->setShortcut(QKeySequence::Back);
connect(prevAct,SIGNAL(triggered()),this,SLOT(prev()));
nextAct=new QAction(QIcon(":/image/next.png"),tr("next"),this);
nextAct->setShortcut(QKeySequence::Forward);
connect(nextAct,SIGNAL(triggered()),this,SLOT(next()));
}
void mainwin::createMenu()
{
navimenu=menuBar()->addMenu(tr("navi"));
navimenu->addAction(dirAct);
navimenu->addAction(prevAct);
navimenu->addAction(nextAct);
}
void mainwin::createToolbar()
{
navitoolbar=addToolBar(tr("navi"));
navitoolbar->addAction(dirAct);
navitoolbar->addSeparator();
navitoolbar->addAction(prevAct);
navitoolbar->addAction(nextAct);
}
void mainwin::createStatusbar()
{
statusBar()->showMessage("ready");
}
void mainwin::selectdir()
{
QString dir=QFileDialog::getExistingDirectory(this,tr("open directory"),QDir::currentPath(),QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks);
if(dir.isEmpty())
{
statusBar()->showMessage("the list is empty!");
return;
}
imgdir.setPath(dir);
QStringList filter;
filter<<"*.jpg"<<"*.bmp"<<"*.jpeg"<<"*.png";
imglist=imgdir.entryList(filter,QDir::Files);
next();
}
void mainwin::next()
{
if(index<imglist.size())
{
imgWidget->setPixmap(imgdir.absolutePath()+QDir::separator()+imglist.at(index));
statusBar()->showMessage(imgdir.absolutePath()+QDir::separator()+imglist.at(index));
index++;
}
}
void mainwin::prev()
{
if(index>0)
{
imgWidget->setPixmap(imgdir.absolutePath()+QDir::separator()+imglist.at(index));
statusBar()->showMessage(imglist.at(index));
index--;
}
}
================================================================================================
main.cpp
================================================================================================
#include <QApplication>
#include <QTextCodec>
#include "mainwin.h"
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(myapp);
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
mainwin mainWin;
mainWin.showMaximized();
return app.exec();
}