QT上位机开发(文件对话框和目录对话框)

发布时间:2024年01月15日

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

? ? ? ? 上位机软件很多时候需要把文件加载到窗口显示,或者是需要处理特定目录下的文件。这个时候,如果这些文件或者目录都写死,或者只是放在配置文件里面,不能动态设置的话,就会很麻烦。所以,这种情况下,我们一般会选择通过启动文件对话框或者目录对话框来解决。大部分gui平台都会提供这两个基础功能。今天,借着学习qt的机会,看看qt下面是怎么加载这两个对话框的。

1、创建qt的基础widget工程

? ? ? ? 和之前一样,创建一个基础的widget工程。

2、构建基础头文件

? ? ? ? 头文件部分,主要就是两个按钮。一个按钮单击后,会加载目录对话框;另外一个按钮单击后,会加载文件对话框。当然,除了这两个按钮之外,还需要添加两个按钮的关联函数。

#pragma once

#include <QtWidgets/QMainWindow>
#include <QPushButton>
#include <QDebug>
#include "ui_QtWidgetsApplication1.h"

class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = nullptr);
    ~QtWidgetsApplication1();

private:
    Ui::QtWidgetsApplication1Class ui;

private slots:
	void choose_dir();
	void choose_file();

private:
	QPushButton *p_button1;
	QPushButton *p_button2;
};

3、实现源文件

? ? ? ? 源文件部分的内容也不复杂。构造函数里面就是常规的按钮创建、位置设定。等按钮创建好了之后,把按钮和回调函数进行关联即可。当然,构造函数中,注意内存的释放。

#include <QFileDialog>
#include "QtWidgetsApplication1.h"

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	// create button1
	p_button1 = new QPushButton("choose dir", this);
	p_button1->setGeometry(100, 100, 100, 30);

	// create button2
	p_button2 = new QPushButton("choose file", this);
	p_button2->setGeometry(300, 100, 100, 30);

	// connect function wiht its button
	connect(p_button1, &QPushButton::clicked, this, &QtWidgetsApplication1::choose_dir);
	connect(p_button2, &QPushButton::clicked, this, &QtWidgetsApplication1::choose_file);
}


QtWidgetsApplication1::~QtWidgetsApplication1()
{
	delete p_button1;
	delete p_button2;
}

? ? ? ? 接着我们来实现目录选择对话框。它使用的是QFileDialog的getExistingDirectory函数来实现的。如果最终用户放弃了选择,则会打印“User canceled selection”,反之则显示对应的目录地址。

void QtWidgetsApplication1::choose_dir()
{
	// create directory dialog
	QString directory = QFileDialog::getExistingDirectory(nullptr,
		"Select a directory",
		QDir::homePath(),
		QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);

	// if give up, directory will be empty
	if (!directory.isEmpty()) {
		qDebug() << "Selected directory: " << directory;
	}
	else {
		qDebug() << "User canceled selection.";
	}

}

? ? ? ?最后我们来实现的是文件选择对话框。它使用的是QFileDialog里面的getOpenFileName来实现的。和目录对话框一样,如果最终用户放弃选择,则会打印“User canceled selection”,反之则会显示对应文件的地址。

void QtWidgetsApplication1::choose_file() 
{
	//  create file dialog
	QString filePath = QFileDialog::getOpenFileName(nullptr,
		"Open File",
		QDir::homePath(),
		"Text Files (*.txt);;All Files (*)");

	// if give up, filePath will be empty
	if (!filePath.isEmpty()) {
		qDebug() << "Selected file: " << filePath;
	}
	else {
		qDebug() << "User canceled selection.";
	}
}

4、测试和验证

? ? ? ? 测试这部分,第一看编译是否正常,第二看功能是否ok。验证功能的时候,需要确认目录对话框和文件对话框是不是真的可以打开,另外各自正常选择和放弃选择的时候,在输出窗口中是否真的有相关的打印。如果这一切都没有问题,那就代表我们的编码是正确的,没有问题的。

? ? ? ? 目录选择框和文件选择框是软件开发中非常常见的功能,建议大家好好学习,多多使用。

文章来源:https://blog.csdn.net/feixiaoxing/article/details/135592426
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。