录制_2022_09_08_17_42_06_223
1 、可以用鼠标滑动、点击 查看图片,
2、可以用鼠标滚轮查看图片
3、左右按钮可自动隐藏和显示,点击切换图片
当图片按照顺序命名,如(1,2,3,4,5,6,7,8,9,10,11,。。。)。程序从文件夹读取的顺序是混乱的,需要重新进行排序。 下面是完整的获取文件夹中的图片
- // 当前程序路径
- QDir dirCurrentPath = QCoreApplication::applicationDirPath();
- // 获取图片所在文件夹
- QString filePath = dirCurrentPath.absoluteFilePath("picture");
-
- QDir dir(filePath);
- if (!dir.exists())
- {
- QMessageBox::critical(this,tr("文件夹不存在"),tr("文件夹找不到"));
- return;
- }
-
- //设置文件名称过滤器, 查看路径中后缀为.jpg 、.jpeg格式的文件
- QStringList filters;
- filters<<QString("*.jpg") << QString("*.jpeg");
- dir.setFilter(QDir::Files | QDir::NoSymLinks); //设置类型过滤器,只为文件格式
- dir.setNameFilters(filters); //设置文件名称过滤器,只为filters格式
-
- //--2 获取当前路径下所有的文件名字
- QStringList fNames = dir.entryList(QDir::Files,QDir::Name);
-
- /*
- * QCollator类
- * QCollator使用QLocale和可选的排序策略进行初始化。它尝试用指定的值初始化collator。然后,可以使用collator以依赖于语言环境的方式对字符串进行比较和排序。
- */
- // 对文件进行排序 (1,2,3,4,5,6,7,8,9,10,11....)
- QCollator collator;
- collator.setNumericMode(true);
- std::sort(fNames.begin(), fNames.end(),
- [& collator](const QString & str1, const QString & str2)
- {
- return collator.compare(str1, str2) < 0;
- });
-
- // 拼接完整路径
- foreach (QString item, fNames) {
- fileNames<< dir.absoluteFilePath(item);
- }
代码太多了, 全部写上看着费劲
- struct ShowPicInfor
- {
- ShowPicInfor() {}
-
- QRectF picRect;
- int picIndex;
- QString picPath;
- };
-
-
- class PictureScroll : public QWidget
- {
- Q_OBJECT
- public:
- explicit PictureScroll(QWidget *parent = nullptr);
- ~PictureScroll();
-
- protected:
- void paintEvent(QPaintEvent *) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void wheelEvent(QWheelEvent *event) override;
- virtual void resizeEvent(QResizeEvent *event) override;
-
- signals:
- void selectPicture(QString picName);
-
- public slots:
- void on_previousPic();
- void on_nextPic();
-
- private:
- void paintPicture(QPainter &painter,const int picIndex, int deviation);//画图
-
- void calculateTheMovingPosition(int x_pos);
-
- private:
- int Mouse_Press; //鼠标拖动值
- int Deviation; //中心图片显示的位置
- int min_height; // 控件高度
- int Now_Value; // 中间显示的图片编号
-
- bool isSelected; // 是否有图片被选中, 没有选中,鼠标移动不起作用
-
- int backgauge = 6; // 预留边距
- QList
listRect; // 记录所有的图片 - QString selectPic; // 当前选中图片名称
-
- QStringList fileNames; // 图片名
-
- };
- void MainWindow::addTwoNuttonsToTheLabel()
- {
- QHBoxLayout *firstRow= new QHBoxLayout;//第一行放个水平布局器
- myLeftButton = new MyPushButton(QIcon(":/img/ico/left.png"));
- connect(myLeftButton,&MyPushButton::click,[=](){ emit fPicScroll->previousPic(); });
-
- firstRow->addWidget(myLeftButton);
-
- // 水平
- QSpacerItem* hSpacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
- firstRow->addSpacerItem(hSpacer);
-
- // // 垂直
- // QSpacerItem* vSpacer = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
- // firstRow->addSpacerItem(vSpacer);
-
- myRightButton = new MyPushButton(QIcon(":/img/ico/right.png"));
- connect(myRightButton,&MyPushButton::click,[=](){emit fPicScroll->nextPic();});
-
- firstRow->addWidget(myRightButton);
- ui->label->setLayout(firstRow);
- }
用ispress 添加点击灰色背景,mouserEnter 判断是否要绘制
- class MyPushButton : public QPushButton
- {
- Q_OBJECT
- public:
- MyPushButton(const QIcon &icon);
-
- protected:
- void paintEvent(QPaintEvent *) override;
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
-
- virtual void enterEvent(QEvent *event);
- virtual void leaveEvent(QEvent *event);
-
- signals:
- void click();
-
- private :
- QIcon m_icon;
- bool isPress;
- bool mouseEnter;
-
- };