当前位置: 首页 > article >正文

Day41 使用listwidget制作简易图片播放器

1.简介

使用QlistWidget实现简易图片播放器,可以打开一个图片序列,通过item的单击事件实现图片的切换,通过设置list的各种属性实现图片预览的显示,美化滚动条即可实现一个简易图片播放器。


2.效果

3.实现步骤:

1.初始化界面部件,主要是设置list为水平滚动模式并且关闭自动换行,这样他可以一直将所有图片显示在一行中,效果为图片播放器的预览窗口。然后设置view mode为图标模式,禁止拖动复制,具体属性在代码部分可见。

    ui->listWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); // 设置水平滚动模式为每个item滚动
    ui->listWidget->setWordWrap(false); // 开启自动换行
    ui->listWidget->setFlow(QListView::TopToBottom);
    ui->listWidget->setViewMode(QListWidget::IconMode);//设置为图标显示方式
    ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    ui->listWidget->setIconSize(QSize(200,150));
    ui->listWidget->setSpacing(10);
    ui->listWidget->setDragDropMode(QAbstractItemView::NoDragDrop); // 禁止拖动复制

2.设置滚动条样式表

horizontalScrollBar = ui->listWidget->horizontalScrollBar();
    QString styleSheet = "QScrollBar:horizontal {"
                        "    border: 2px solid #999999;"
                        "    background: #f0f0f0;"
                        "    height: 15px;"
                        "    margin: 0px 22px 0px 22px;"
                        "    border-radius: 7px;"
                        "}"
                        "QScrollBar::handle:horizontal {"
                        "    background: #666666;"
                        "    min-width: 20px;"
                        "    border-radius: 7px;"
                        "}"
                        "QScrollBar::add-line:horizontal {"
                        "    width: 20px;"
                        "    subcontrol-position: right;"
                        "    subcontrol-origin: margin;"
                        "    border-image: url(:/images/arrow_right.png);"
                        "}"
                        "QScrollBar::sub-line:horizontal {"
                        "    width: 20px;"
                        "    subcontrol-position: left;"
                        "    subcontrol-origin: margin;"
                        "    border-image: url(:/images/arrow_left.png);"
                        "}";
    horizontalScrollBar->setStyleSheet(styleSheet);

3.通过按钮弹出文件选择对话框,选择各种类型的图片。

QStringList paths = QFileDialog::getOpenFileNames(this,"Seclect img","D:\\", tr("ALL Files (*.jpg *.jpeg *.png *.bmp);;JPEG Files (*.jpg *.jpeg);;PNG Files (*.png);;GIF Files (*.gif);;BMP Files (*.bmp)"));

4.将所有的图片加载成item项,同时滚动条可以根据图片内容自动调整大小。

totalNumber = paths.size();
    //序列显示
    for(int i = 0; i < totalNumber; i++) {
        QFileInfo fileInfo(currentPaths.at(i));
        qDebug()<<"currentPaths"<<fileInfo.fileName();
        QListWidgetItem *signalPicItem=new QListWidgetItem(QIcon(currentPaths.at(i)),fileInfo.fileName());
        ui->listWidget->addItem(signalPicItem);
    }

5.连接item单击事件,完成图片的切换操作。

QObject::connect(ui->listWidget, &QListWidget::itemClicked, [&](QListWidgetItem *item) {
            // 在这里处理项目单击事件
            setCurrentImage(ui->listWidget->row(item));
            qDebug() << "Clicked item text:" << item->text()<<ui->listWidget->row(item);
        });

6.中心部分的显示区域由Qlabel完成图片的显示。

void MainWindow::setCurrentImage(int index)
{
    QString path = currentPaths.at(index);
    QPixmap pix(path);
    ui->label->setPixmap(path);
    ui->listWidget->setItemSelected(ui->listWidget->item(index), true);
}


http://www.kler.cn/a/154295.html

相关文章:

  • Flutter网络通信-封装Dio
  • 2024年了,TCP分析工具有哪些?
  • Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真
  • RTSP播放器EasyPlayer.js播放器UniApp或者内嵌其他App里面webview需要截图下载
  • 如何使用 XML Schema
  • 01.02、判定是否互为字符重排
  • 科研学习|论文解读——Open government research over a decade: A systematic review
  • 【android开发-06】android中textview,button和edittext控件的用法介绍
  • vue3-vite-ts:编写Rollup插件并使用 / 优化构建过程
  • 来CSDN一周年啦!!!
  • DBeaver 社区版(免费版)下载、安装、解决驱动更新出错问题
  • 初识短线交易
  • 华为OD机试真题-来自异国的客人-2023年OD统一考试(C卷)
  • 关于标准库中的vector - (涉及迭代器失效,深浅拷贝,构造函数,内置类型构造函数,匿名对象)
  • 解决因系统重装,导致QT编译器无法使用的办法
  • SickOs1.2
  • linux 下如何将/dev/nvme0n1符格式化为空盘符
  • 有点迷糊class和初始化参数的用法了
  • 基于llm的智能体-生命体
  • 进程的创建:fork()
  • 自动提交日志脚本(4) 时间管理部分
  • Net6.0或Net7.0项目升级到Net8.0 并 消除.Net8中SqlSugar的警告
  • LabVIEW在不同操作系统上使VI、可执行文件或安装程序
  • python常用函数
  • 应用于智慧金融的AI边缘计算盒子+AI算法软硬一体化方案
  • 智能优化算法应用:基于象群算法无线传感器网络(WSN)覆盖优化 - 附代码