赞
踩
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLabel> //标签 #include <QPushButton> //按钮 #include <QFileDialog> //文件对话框头文件 #include <QStringList> //字符串表的头文件 用来获取文件返回值 #include <QEvent> #include <QKeyEvent> class Widget : public QWidget { Q_OBJECT public slots: //设置槽函数 void openfiles() //设置获取照片槽函数 { index = 0; //设置默认到开0 也就是第一个照片 files = QFileDialog::getOpenFileNames(); //获取照片名 返回到字符串表 QPixmap pix(files[index]); //显示第一张照片 lb->setPixmap(pix); } void showr() //设置右翻照片槽函数 { if(index+1 < files.length()) //进行越界判断 files.length 数组的长度 index++; else index = 0; //如果不符合就说明到最后一张照片了 直接显示第一张照片 QPixmap pix(files[index]); lb->setPixmap(pix); } void showl() //设置左翻照片槽函数 { if(index-1 >= 0) index--; else index = files.length()-1; //最后一张照片减一 QPixmap pix(files[index]); lb->setPixmap(pix); } bool eventFilter(QObject *watched, QEvent *event) //过滤器的身份 参数一:传给你的人是谁 参数二:传给你的是什么事件 { lb->setFocus(); //防止脱焦 if(watched == lb) //网到标签的信号 { if(event->type()== QEvent::KeyPress) //如果传的信号是一个按键的信号 { QKeyEvent *keyevent = static_cast<QKeyEvent*>(event); //静态强制转换为想要的event QKeyEvent if(keyevent->key() == Qt::Key_Left ) //判断是不是与左键值相等 相等向左边翻 showl(); //调用向左 else if(keyevent->key() == Qt::Key_Right) showr(); //调用右切换 return true; //网到东西 } } return QWidget::eventFilter(watched,event); //表示暂时不需要 看看其他的是否需要这事件 } public: Widget(QWidget *parent = 0); ~Widget(); private: QLabel *lb; QPushButton *lbt,*rbt,*openbt; //三个按键 QStringList files; //文件表对象 int index; //设置一个下标 }; #endif // WIDGET_H
#include "widget.h" #include <QVBoxLayout> //垂直布局 #include <QHBoxLayout> //水平布局 Widget::Widget(QWidget *parent) : QWidget(parent) { lb = new QLabel; //构造框 lb->setMinimumSize(640,480); //设置最小大小 lb->setScaledContents(true); //大小自动缩放 lb->setFocus(); //键盘聚焦 lb->installEventFilter(this); //安装一个过滤器 this 相当于过滤器 this激活函数eventfilter函数进行过滤 lbt = new QPushButton("<"); //向左翻按钮 rbt = new QPushButton(">"); //向右按钮 openbt = new QPushButton("open"); //打开按钮 QHBoxLayout *hbox = new QHBoxLayout; //设置水平布局 hbox->addStretch(); //左留白 居中处理 hbox->addWidget(lbt); //布局按钮 hbox->addWidget(openbt); hbox->addWidget(rbt); hbox->addStretch(); //右留白 居中处理 使三个按钮进行居中 QVBoxLayout *vbox = new QVBoxLayout; //设置垂直布局 vbox->addWidget(lb); vbox->addLayout(hbox); //把水平布局添加进去 setLayout(vbox); //vbox设置为主布局 index = 0; connect(openbt,SIGNAL(clicked(bool)),this,SLOT(openfiles())); //绑定槽函数 connect(lbt,SIGNAL(clicked(bool)),this,SLOT(showl())); connect(rbt,SIGNAL(clicked(bool)),this,SLOT(showr())); } Widget::~Widget() { }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。