使用Qt5.12实现了一个图片查看小程序。图片显示区域使用Scroll Area。《嵌入式Qt实战教程》这本书中的例程,本文主要是记录练习过程。 先画一个这样的界面。 然后每个控件的属性设置成这样。主要是对象名和控件名称。 只需要修改widget.h和widget.cpp中的代码。两个文件的代码修改成下面这样。 widget.h中的代码:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileDialog>
#include <QString>
#include <QTimer>
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_btn_open_clicked();
void on_btn_start_clicked();
void on_btn_stop_clicked();
void on_btn_prev_clicked();
void on_btn_next_clicked();
void on_btn_up_clicked();
void on_btn_down_clicked();
void on_btn_normal_clicked();
void pic_scan();
private:
Ui::Widget *ui;
QTimer *timer;
QPixmap pix;
QLabel *label;
};
#endif
widget.cpp中的代码:
#include "widget.h"
#include "ui_widget.h"
static QStringList::Iterator it;
static QString image[100];
static int iCount=0;
static int i=0;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
label = new QLabel();
ui->scrollArea->setWidget(label);
ui->scrollArea->setAlignment(Qt::AlignCenter);
timer = new QTimer;
connect(timer,SIGNAL(timeout()),this,SLOT(pic_scan()));
label->setAlignment(Qt::AlignCenter);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btn_open_clicked()
{
timer->stop();
QStringList fileNameList = QFileDialog::getOpenFileNames(this,"file open","/home/legend",
"Picture File(*.png;*.bmp;*.jpg);;All Files(*)");
for (it=fileNameList.begin();it != fileNameList.end() ;it++ ) {
image[iCount] = *it;
iCount++;
}
pix.load(image[i]);
label->setPixmap(pix);
}
void Widget::on_btn_start_clicked()
{
timer->start(3000);
}
void Widget::on_btn_stop_clicked()
{
timer->stop();
}
void Widget::on_btn_prev_clicked()
{
timer->stop();
i--;
if(i<0){
i=iCount-1;
}
pix.load(image[i]);
label->setPixmap(pix);
}
void Widget::on_btn_next_clicked()
{
timer->stop();
i++;
if(i>iCount - 1){
i=0;
}
pix.load(image[i]);
label->setPixmap(pix);
}
void Widget::on_btn_up_clicked()
{
timer->stop();
double x = pix.width();
double y = pix.height();
pix.load(image[i]);
pix=pix.scaled(x*1.2,y*1.2,Qt::KeepAspectRatio);
label->setPixmap(pix);
}
void Widget::on_btn_down_clicked()
{
timer->stop();
double x = pix.width();
double y = pix.height();
pix.load(image[i]);
pix=pix.scaled(x/1.2,y/1.2,Qt::KeepAspectRatio);
label->setPixmap(pix);
}
void Widget::on_btn_normal_clicked()
{
timer->stop();
pix.load(image[i]);
label->setPixmap(pix);
}
void Widget::pic_scan()
{
pix.load(image[i]);
label->setPixmap(pix);
i++;
if(i>iCount -1){
i=0;
}
}
运行效果:
|