qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)

这篇具有很好参考价值的文章主要介绍了qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 新建 widget 项目可参考

QT入门初学者——如何新建一个工程项目(详细)_guuuuug的博客-CSDN博客_qt新建工程
 

实现界面,点击浏览会打开文件夹

qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)

选中文件,窗口显示文件名,文件路径

qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)

qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)

过长的文字会在最后显示...,鼠标悬浮在文字栏会显示全部文字。

点击右下角打开可以实现打开目标文件目录(0 ~ 4个),点击清除可以清除全部

qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)

代码实现:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPushButton>
#include <QApplication>
#include <QDialog>
#include <QLabel>
#include <QString>
#include <QFileDialog>
#include <QDialogButtonBox>
#include <QDesktopServices>
namespace Ui {
class Widget;

}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_lineEdit_textChanged( );
    void on_lineEdit( );

private:
    Ui::Widget *ui;

    QPushButton *b1;
    QLabel *label;
    QLabel *label1;

    QPushButton *b2;
    QLabel *label2;
    QLabel *label22;

    QPushButton *b3;
    QLabel *label3;
    QLabel *label133;

    QPushButton *b4;
    QLabel *label4;
    QLabel *label144;

    QPushButton *b10;
    QPushButton *b11;

};


#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    b1 = new QPushButton;
    b2 = new QPushButton;
    b3 = new QPushButton;
    b4 = new QPushButton;
    label = new QLabel;
    label1 = new QLabel;
    label2 = new QLabel;
    label22 = new QLabel;
    label3 = new QLabel;
    label133 = new QLabel;
    label4 = new QLabel;
    label144 = new QLabel;

    b1->setParent(this);
    b1->setText("浏览");
    b1->setGeometry(420,50,50,30);


    label->setParent(this);
    label->setGeometry(20,50,100,30);
    label->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");


    label1->setParent(this);
    label1->setGeometry(150,50,250,30);
    label1->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");



    b2->setParent(this);
    b2->setText("浏览");
    b2->setGeometry(420,100,50,30);

    label2->setParent(this);
    label2->setGeometry(20,100,100,30);
    label2->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");


    label22->setParent(this);
    label22->setGeometry(150,100,250,30);
    label22->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");



    b3->setParent(this);
    b3->setText("浏览");
    b3->setGeometry(420,150,50,30);

    label3->setParent(this);
    label3->setGeometry(20,150,100,30);
    label3->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");


    label133->setParent(this);
    label133->setGeometry(150,150,250,30);
    label133->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");



    b4->setParent(this);
   b4->setText("浏览");
    b4->setGeometry(420,200,50,30);

    label4->setParent(this);
    label4->setGeometry(20,200,100,30);
    label4->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");


    label144->setParent(this);
    label144->setGeometry(150,200,250,30);
    label144->setStyleSheet("QLabel{background-color:rgb(255,255,255);}");
    b10 = new QPushButton;
    b10->setParent(this);
    b10->setGeometry(300, 255, 50, 20);
    b10->setText("打开");
    b11 = new QPushButton;
    b11->setParent(this);
    b11->setGeometry(380, 255, 50, 20);
    b11->setText("清除");

    //槽函数的两种写法
    //connect(b1, SIGNAL(clicked()), this, SLOT(on_lineEdit_textChanged()));  写法1
    connect(b1, &QPushButton::clicked, this, &Widget::on_lineEdit_textChanged);  //写法2
    connect(b2, &QPushButton::clicked, this, &Widget::on_lineEdit_textChanged);
    connect(b3, &QPushButton::clicked, this, &Widget::on_lineEdit_textChanged);
    connect(b4, &QPushButton::clicked, this, &Widget::on_lineEdit_textChanged);
    b1->setObjectName("1");
    b2->setObjectName("2");
    b3->setObjectName("3");
    b4->setObjectName("4");

    connect(b10, &QPushButton::clicked, this, &Widget::on_lineEdit);
    connect(b11, &QPushButton::clicked, this, &Widget::on_lineEdit);
    b10->setObjectName("10");
    b11->setObjectName("11");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_lineEdit_textChanged( )
{
    QString fullPath = QFileDialog::getOpenFileName();
    QString filename, filePath;
    QFileInfo fileInfo = QFileInfo(fullPath);
    //文件名
    filename = fileInfo.fileName();

    //绝对路径l
    filePath = fileInfo.absolutePath();

    QFontMetrics fontWidth(label1->font());//得到每个字符的宽度
    QString elideNote = fontWidth.elidedText(filePath, Qt::ElideRight, 250);//最大宽度250像素
    QString fileName = fontWidth.elidedText(filename, Qt::ElideRight, 100);//最大宽度100像素

    QPushButton* btn= qobject_cast<QPushButton*>(sender());
    QString str = btn->objectName();

    if(str == "1"){
        label->setText(fileName);
        label->setToolTip(filename);
        label1->setText(elideNote);
        label1->setToolTip(filePath);

      }
    if(str == "2"){
        label2->setText(fileName);
        label2->setToolTip(filename);
        label22->setText(elideNote);
        label22->setToolTip(filePath);
      }
    if(str == "3"){
        label3->setText(fileName);
        label3->setToolTip(filename);
        label133->setText(elideNote);
        label133->setToolTip(filePath);
      }
    if(str == "4"){
        label4->setText(fileName);
        label4->setToolTip(filename);
        label144->setText(elideNote);
        label144->setToolTip(filePath);
      }

}

void Widget::on_lineEdit(){
    QPushButton* btn= qobject_cast<QPushButton*>(sender());
    QString str = btn->objectName();


    if(str == "10"){
        QString st= label1->toolTip();
        QDesktopServices::openUrl(QUrl::fromLocalFile(st));
        QString st1= label22->toolTip();
        QDesktopServices::openUrl(QUrl::fromLocalFile(st1));
        QString st2= label133->toolTip();
        QDesktopServices::openUrl(QUrl::fromLocalFile(st2));
        QString st3= label144->toolTip();
        QDesktopServices::openUrl(QUrl::fromLocalFile(st3));
    }

    else if(str == "11"){
        label->clear();
        label1->clear();
        label1->setToolTip(" ");

        label2->clear();
        label22->clear();
        label22->setToolTip("");

        label3->clear();
        label133->clear();
        label133->setToolTip("");

        label4->clear();
        label144->clear();
        label144->setToolTip("");
    }

}


main.cpp

#include "widget.h"
#include <QApplication>
#include <QDialog>
#include <QLabel>
#include <QString>
#include <QFileDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.resize(500,300);
    w.show();

    return a.exec();
}

 推荐一下,这位大佬写的非常详细,还有源码可下载:

QT GUI编程_子羽丿的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-509008.html

到了这里,关于qt 窗口实现打开文件夹浏览资源(纯代码实现,后附代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity功能实现_打开Window的文件/文件夹

    🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎目标:打开Window的文件/文件夹 ☀️核心代码 GetOpenFileName和GetSaveFileName都是Windows API中的函数,它们都定义在comdlg32.dll中。这两个函数都是用来显示文件打开或保存对话框的。

    2024年02月02日
    浏览(63)
  • 【关于前端打开本地文件夹获取本地文件路径】碰到需要打开本地文件路径,然后选中路径保存问题功能实现

    需要导入const ipcRenderer = require(“electron”).ipcRenderer; 但是必须要选中的文件夹里含有文件,因为是截取的,如果没有文件获取到的就是空的,是无法得到路径的 还是不知道怎么完全写打开一个目录然后保存到此目录。目前选择的目录如果无文件则覆盖不到。

    2024年04月11日
    浏览(83)
  • Qt 实现压缩文件、文件夹和解压缩操作zip

    通过Qt自带的库来实现,使用多线程方式,通过信号和槽来触发压缩与解压缩,并将压缩和解压缩结果回传过来。 使用的类: 1、在.pro文件中添加模块gui-private 若未cmake工程,需要在CMakeList.txt中添加 待验证: 1、中文路径,文件名含有中文 2、隐藏文件夹,.dir和…dir,例如:

    2024年02月14日
    浏览(45)
  • 实现对文件夹的动态检测功能——基于QT

    作者:小 琛 欢迎转载,请标明出处 个人遇到的需求:业务中,需要和其它模块对接,完成某类文件的生成、删除…等一系列操作,如果通过和其它模块定接口的方式,所需要的接口量很多并且所需要考虑的细节也很多。同时有一个很重要的点:这些文件是公用的,也就是说

    2024年02月09日
    浏览(39)
  • hadoop java 创建文件夹 弹出窗口填写文件夹名称

    在Hadoop中使用Java创建文件夹时,无法弹出窗口来填写文件夹名称,因为Hadoop是一个分布式系统,运行在多台计算机上,无法直接与用户交互。 要创建文件夹,可以使用Hadoop的Java API中的Filesystem对象。以下是一个示例代码,演示如何在Hadoop中创建文件夹: 此代码创建了一个名

    2024年01月19日
    浏览(63)
  • electron 打开本地文件夹

    使用的api为 shell.openPath ,有些文章会提到 shell.openItem ,这个方法在 electron 9.0 后就废弃被 openPath 替代了。 还有 shell.openExternal ,但路径中含有中文会报错,需转码,不推荐使用。 打开E盘根目录下名为 test 的文件夹 能打开的前提是,E盘根目录下确实有这个文件夹。其次可以发

    2024年02月15日
    浏览(50)
  • Mac双击无法打开文件或者文件夹

    在使用MAC过程中出现双击无法打开文件或者文件夹,这可能与鼠标连按速度有关,下面分享一下如何解决Mac鼠标双击打不开文件和文件夹的问题。 打开 系统偏好设置 打开 辅助功能 指针控制 ,将“连按速度”的滑块左右调整,同时测试双击打开文件或文件夹。

    2024年02月06日
    浏览(94)
  • 右击文件或者文件夹使用vscode打开

    平常我们在打开项目时,经常会需要快捷打开方式,直接使右键使用编辑器打开,但是有时在安装时忘记了选择 “Add “Open with Code” action to Windows Explorer file context menu” 在Windows资源管理器文件上下文菜单中添加“用代码打开”操作 Add “Open with Code” action to Windows Explorer d

    2024年02月05日
    浏览(62)
  • 在任何文件夹下打开jupyter 内核都是同一个文件夹

     我在 D:anaconda实例代码 下打开jupyter notebook  无论我在那个文件下打开jupyter 都是同一个文件这是因为你可能在jupyter notebook 的那个配置文件中设置固定的路径 假如你的.py 文件在D:anaconda实例代码 下 你想通过jupyter notebook 运行它很简单  上传到jupyter notebook本地      如何运

    2024年02月12日
    浏览(67)
  • Unity打开本地文件夹替换视频

    AVpro插件是一款很强大的视频播放插件,配合Unity使用有意想不到的效果,他的各项功能网上都有,我就不进行展开讨论了。 该插件的获取方式为AssetStore中购买下载,该插件有一个免费版本可供使用,付费版本的功能强大一点。 有需要的也可以私信我,我分享给你,你只能用

    2023年04月08日
    浏览(114)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包