精华内容
下载资源
问答
  • Unity操作文件对话框
    千次阅读
    2022-03-16 13:09:55

    一、运行时操作文件对话框

    调用Win32操作对话框

    (1)OpenFileDialog控件的基本属性

    • InitialDirectory:对话框的初始目录
    • Filter:获取或设置当前文件名筛选器字符串,
      例如:文本文件 "txt (.txt)";
      所有文件 (
      .)||.*
    • FilterIndex在对话框中选择的文件筛选器的索引,如果选第一项就设为1
    • RestoreDirectory 控制对话框在关闭之前是否恢复当前目录
    • FileName:第一个在对话框中显示的文件或最后一个选取的文件
    • Title 将显示在对话框标题栏中的字符
    • AddExtension是否自动添加默认扩展名
    • CheckPathExists 在对话框返回之前,检查指定路径是否存在
    • DefaultExt 默认扩展名
    • DereferenceLinks 在从对话框返回前是否取消引用快捷方式
    • ShowHelp 启用"帮助"按钮
    • ValiDateNames控制对话框检查文件名中是否不含有无效的字符或序列

    (2)OpenFileDialog控件有以下常用事件

    • FileOk 当用户点击"打开"或"保存"按钮时要处理的事件
    • HelpRequest 当用户点击"帮助"按钮时要处理的事件

    1.打开对话框;保存对话框;调用windows窗口对文件进行筛选功能,文件类型自定义

    (1)打开对话框
    在这里插入图片描述

    (2)保存对话框
    在这里插入图片描述

    (3)调用windows窗口对文件进行筛选功能,文件类型自定义
    在这里插入图片描述
    主要是:设置filter,并且结合pth.filterIndex去选择使用生成的类型列表中的第几个(注意是从1开始的)

     //\0字符串分隔符(多个根据\0分割的字符串形成下拉列表);
    //pth.filter = "JSON file(*.json)\0*.json\0FBX file(*.fbx)\0*.fbx\0"; //* \0*.fbx";
    //;是&的作用 1:.json;.fbx;.gltf 2:.json 3:.fbx 4:.gltf 5:PNG 6:All Files
    pth.filter = "模型文件(*.json|*.fbx|*.gltf)\0*.json;*.fbx;*.gltf\0JSON file(*.json)\0*.json\0FBX file(*.fbx)\0*.fbx\0GLTF file(*.gltf)\0*.gltf\0PNG file(*.png)\0*.png\0All Files\0*.*\0\0";
    

    2.实现步骤

    (1)创建窗口对话框类:FileDialog

    using UnityEngine;
    using System.Collections;
    using System.Runtime.InteropServices;
    using System;
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class FileDialog
    {
        public int structSize = 0;
        public IntPtr dlgOwner = IntPtr.Zero;
        public IntPtr instance = IntPtr.Zero;
        public String filter = null;
        public String customFilter = null;
        public int maxCustFilter = 0;
        public int filterIndex = 0;
        public String file = null;
        public int maxFile = 0;
        public String fileTitle = null;
        public int maxFileTitle = 0;
        public String initialDir = null;
        public String title = null;
        public int flags = 0;
        public short fileOffset = 0;
        public short fileExtension = 0;
        public String defExt = null;
        public IntPtr custData = IntPtr.Zero;
        public IntPtr hook = IntPtr.Zero;
        public String templateName = null;
        public IntPtr reservedPtr = IntPtr.Zero;
        public int reservedInt = 0;
        public int flagsEx = 0;
    }
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class OpenFileDlg : FileDialog
    {
    
    }
    public class OpenFileDialog
    {
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetOpenFileName([In, Out] OpenFileDlg ofd);
    }
    
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class SaveFileDlg : FileDialog
    {
    
    }
    public class SaveFileDialog
    {
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetSaveFileName([In, Out] SaveFileDlg ofd);
    }
    

    (2)创建DialogManager类,调用刚才FileDialog,

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;
    
    public class DialogManager:MonoBehaviour
    {
    	Action<string> action;
    	
    
    	/// <summary>
    	/// 打开项目弹框
    	/// </summary>
    	/// <returns></returns>
    	public void OpenWindowDialog()
    	{
    		
    		string filepath = "";
    		OpenFile pth = new OpenFile();
    		pth.structSize = System.Runtime.InteropServices.Marshal.SizeOf(pth);
    		// pth.filter = "JSON file(*.json)";//是什么文件类型就修改此处
    		pth.filter = "All Files\0*.*\0\0";
    		pth.file = new string(new char[256]);
    		pth.maxFile = pth.file.Length;
    		pth.fileTitle = new string(new char[64]);
    		pth.maxFileTitle = pth.fileTitle.Length;
    		pth.initialDir = Application.dataPath;  // default path
    		pth.title = "打开项目";  //标题
    		pth.defExt = "json";
    
    		//注意 一下项目不一定要全选 但是0x00000008项不要缺少
    		//0x00080000   是否使用新版文件选择窗口,0x00000200   是否可以多选文件
    		pth.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
    
    		if (OpenFileWindow.GetOpenFileName(pth))
    		{
    			filepath = pth.file;//选择的文件路径;
    			action(filepath);
    		}
    	}
    
    	/// <summary>
    	/// 创建保存场景/另存场景面板
    	/// </summary>
    	/// <param name="titleName">面板主题名</param>
    	/// <param name="filePath">保存路径</param>
    	public void SaveOrSaveAsWindowDialog()
    	{
    		SaveFile pth = new SaveFile();
    		pth.structSize = System.Runtime.InteropServices.Marshal.SizeOf(pth);
    		pth.filter = "All Files\0 *.*\0\0";//是什么文件类型就修改此处
    		pth.file = new string(new char[256]);
    		pth.maxFile = pth.file.Length;
    		pth.fileTitle = new string(new char[64]);
    		pth.maxFileTitle = pth.fileTitle.Length;
    		pth.initialDir = Application.dataPath;  // default path
    		pth.title = "保存项目";
    		pth.defExt = "json";
    		pth.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
    		if (SaveFileWindow.GetSaveFileName(pth))
    		{
    			string filepath = pth.file;//选择的文件路径;
    			action(filepath);
    		}
    	}
    
    
    	/// <summary>
    	/// 获取SceneName
    	/// </summary>
    	/// <param name="name">路径名字</param>
    	/// <returns></returns>
    	private string GetSceneName(string name)
    	{
    		string[] names = name.Split('\\');
    		string myname = names[names.Length - 1].Split('.')[0];
    		return myname;
    	}
    
    
    	/// <summary>
    	/// 文件过滤器类型
    	/// </summary>
    	public enum FileFilterType
    	{
    
    		/// <summary>
    		/// 模型文件(.json/.gltf/.fbx)   1
    		/// </summary>
    		Model_File,
    
    		/// <summary>
    		/// json文件(.json) 2
    		/// </summary>
    		JSON_File,
    
    		/// <summary>
    		/// FBX文件(.fbx) 3
    		/// </summary>
    		FBX_File,
    
    		/// <summary>
    		/// GLTF文件(.gltf)  4
    		/// </summary>
    		GLTF_File,
    
    		/// <summary>
    		/// PNG文件(.png)   5
    		/// </summary>
    		PNG_File,
    
    		/// <summary>
    		/// ALLFile    6
    		/// </summary>
    		AllFile,
    	}
    
    
    	
    	
    
    	/// <summary>
    	/// 调用windows窗口对文件进行筛选功能,文件类型自定义,打开项目弹框
    	/// </summary>
    	/// <returns></returns>
    	public void OpenWindowFilterDialog()
    	{
    		string filepath = "";
    		OpenFile pth = new OpenFile();
    		pth.structSize = System.Runtime.InteropServices.Marshal.SizeOf(pth);
    
    		//\0字符串分隔符(多个根据\0分割的字符串形成下拉列表);
    		//pth.filter = "JSON file(*.json)\0*.json\0FBX file(*.fbx)\0*.fbx\0"; //* \0*.fbx";
    		//;是&的作用   1:.json;.fbx;.gltf 2:.json 3:.fbx 4:.gltf 5:PNG  6:All Files
    		FileFilterType fileFilterType=new FileFilterType();
    		pth.filter = "模型文件(*.json|*.fbx|*.gltf)\0*.json;*.fbx;*.gltf\0JSON file(*.json)\0*.json\0FBX file(*.fbx)\0*.fbx\0GLTF file(*.gltf)\0*.gltf\0PNG file(*.png)\0*.png\0All Files\0*.*\0\0";
    		pth.filterIndex = ((int)fileFilterType + 1);
    		pth.file = new string(new char[256]);
    		pth.maxFile = pth.file.Length;
    		pth.fileTitle = new string(new char[64]);
    		pth.maxFileTitle = pth.fileTitle.Length;
    		pth.initialDir = Application.dataPath;  // default path
    		pth.title = "打开挑选项目";
    		pth.defExt = "txt"; //默认扩展名
    
    		//注意 一下项目不一定要全选 但是0x00000008项不要缺少
    		//0x00080000   是否使用新版文件选择窗口,0x00000200   是否可以多选文件
    		pth.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;
    
    		if (OpenFileWindow.GetOpenFileName(pth))
    		{
    			filepath = pth.file;//选择的文件路径;
    			action(filepath);
    		}
    	}
    
    }
    
    

    (4)创建“打开对话框”,“保存对话框”,“筛选对话框”三个Button,分别挂载FileDialogControllor的对应方法
    (4)运行

    二、编辑时操作文件对话框

    使用EditorUtility.OpenFilePanel或者EditorUtility.OpenFolderPanel方法
    (1)创建EditedDialogController类

    using System.Collections;
    using System.Collections.Generic;
    using UnityEditor;
    using UnityEngine;
    
    public class EditedDialogController : MonoBehaviour
    {
        [MenuItem("Custom/OpenFile")]
        public static void OpenFile()
        {
            string file = EditorUtility.OpenFilePanel("Open File Dialog", "D:\\", "exe");
            Debug.Log(file);
        }
    
        [MenuItem("Custom/OpenFolder")]
        public static void OpenFolder()
        {
            string file = EditorUtility.OpenFolderPanel("Open Folder Dialog", "D:\\", "unity");
            Debug.Log(file);
        }
    
    }
    
    

    (2)保存之后unity自动添加
    在这里插入图片描述

    更多相关内容
  • Qml文件对话框QmlFileDialog.7z
  • VC_CFileOpen打开文件对话框中实现多选文件.visual c++
  • 如何在 Windows 7 系统中向用户显示一个用来选择文件对话框
  • 主要介绍了PyQt5打开文件对话框QFileDialog实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • 可以打开多个文件对话框的模块
  • 易语言可以打开多个文件对话框的模块源码,可以打开多个文件对话框的模块,打开多文件对话框,打开对话框
  • 主要介绍了C++采用openfilename打开文件对话框用法实例,是C++文件操作中非常实用的技巧,需要的朋友可以参考下
  • Unity发布WebGL时,打开文件对话框使用Win32和Dll的方式行不通,这里使用C#调用JS方法是可以的
  • 点击按钮,打开文件对话框选择文件,获取文件名路径、文件信息、文件名处理
  • 云外归鸟 [原创]可以打开多个文件对话框的模块(包含模块源码和例程) 扩展通用对话框支持库太大,只好自己编了个专门选择多个文件对话框的模块,包含模块源码的,不足地方自己修改 易语言如何自学
  • 简单文件对话框一个小的C库,用于在Windows和Linux上打开文件对话框。 用法sfd.c和sfd.h应该放到现有项目中,并与之一起编译-在Windows上comdlg32应该链接起来。 简单文件对话框一个小的C库,用于在Windows和Linux上...
  • 易语言模块求真文件对话框模块.rar 易语言模块求真文件对话框模块.rar 易语言模块求真文件对话框模块.rar 易语言模块求真文件对话框模块.rar 易语言模块求真文件对话框模块.rar 易语言模块求真文件对话框模块....
  • 完整版求真文件对话框模块.rar 完整版求真文件对话框模块.rar 完整版求真文件对话框模块.rar 完整版求真文件对话框模块.rar 完整版求真文件对话框模块.rar 完整版求真文件对话框模块.rar
  • Filter:要在对话框中显示的文件筛选器,例如,”文本文件(*.txt)|*.txt|所有文件(*.*)||*.*”。 FilterIndex:在对话框中选择的文件筛选器的索引,如果选第一项就设为1。 RestoreDirectory:控制对话框在关闭之前...
  • 易语言API实现文件对话框源码
  • Android文件对话框的代码例子,用于演示自定义对话框的步骤与用法。示例代码中实现了如下对话框:日期选择对话框、时间选择对话框、信息确认对话框、文件打开对话框、文件保存对话框
  • 图片、文本文件对话框模块.e.rar
  • 本文讲解了MFC 通用对话框中的文件对话框类CFileDialog,及其常用成员函数的用法

    CFileDialog 类 封装了Windows通用文件对话框,Windows通用文件对话框提供了轻松实现与Windows标准一致的打开文件、保存文件、另存文件对话框的方法。

    当我们用CFileDialog类的构造函数生成一个对象后就修改m_ofn 结构体对象里的值,m_ofn的类型为OPENFILENAME。CFileDialog类构造函数的格式如下:

    CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

    bOpenFileDialog 如果为值TRUE,构造打开对话框,反之为保存对话框

    lpszDefExt 用于确定文件的默认扩展名,如果为NULL,没有扩展名被插入到文件名中。

    lpszFileName 确定通用文件对话框中的文件名编辑框控件的初值,如果为NULL,编辑框为空,没有文件名。

    dwFlags 用于自定义通用文件对话框。有以下选项:

    一般情况下,使用缺省值即可。 

    lpszFilter 用于指定过滤文件的类型。

    pParentWnd 标识通用文件对话框的父窗口的指针。

    OPENFILENAME 结构体原型如下:

     lpstrFilter

     Pointer to a buffer containing pairs of null-terminated filter strings. The last string in the buffer must be terminated by two NULL characters.The first string in each pair is a display string that describes the filter (for example, "Text Files"), and the second string specifies the filter pattern (for example, "*.TXT"). To specify multiple filter patterns for a single display string, use a semicolon to separate the patterns (for example, "*.TXT;*.DOC;*.BAK"). A pattern string can be a combination of valid file name characters and the asterisk (*) wildcard character. Do not include spaces in the pattern string.The system does not change the order of the filters. It displays them in the File Types combo box in the order specified in lpstrFilter.If lpstrFilter is NULL, the dialog box does not display any filters.

    lpstrCustomFilter 

    Pointer to a static buffer that contains a pair of null-terminated filter strings for preserving the filter pattern chosen by the user. The first string is your display string that describes the custom filter, and the second string is the filter pattern selected by the user. The first time your application creates the dialog box, you specify the first string, which can be any nonempty string. When the user selects a file, the dialog box copies the current filter pattern to the second string. The preserved filter pattern can be one of the patterns specified in the lpstrFilter buffer, or it can be a filter pattern typed by the user. The system uses the strings to initialize the user-defined file filter the next time the dialog box is created. If the nFilterIndex member is zero, the dialog box uses the custom filter.If this member is NULL, the dialog box does not preserve user-defined filter patterns.If this member is not NULL, the value of the nMaxCustFilter member must specify the size, in TCHARs, of the lpstrCustomFilter buffer. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters.

     lpstrFile

    Pointer to a buffer that contains a file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary. When the GetOpenFileName or GetSaveFileName function returns successfully, this buffer contains the drive designator, path, file name, and extension of the selected file.If the OFN_ALLOWMULTISELECT flag is set and the user selects multiple files, the buffer contains the current directory followed by the file names of the selected files. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name. For old-style dialog boxes, the strings are space separated and the function uses short file names for file names with spaces. You can use the FindFirstFile function to convert between long and short file names. If the user selects only one file, the lpstrFile string does not have a separator between the path and file name.If the buffer is too small, the function returns FALSE and the CommDlgExtendedError function returns FNERR_BUFFERTOOSMALL. In this case, the first two bytes of the lpstrFile buffer contain the required size, in bytes or characters.

    lpstrFileTitle

    Pointer to a buffer that receives the file name and extension (without path information) of the selected file. This member can be NULL.

    lpstrInitialDir

    Pointer to a null terminated string that can specify the initial directory. The algorithm for selecting the initial directory varies on different platforms.

    要显示通用文件对话框,使用DoModal函数即可。DoModal函数的返回值为IDOK or IDCANCEL.如果用户在用文件对话框点击了OK按钮就返回IDOK,击了CANCELL按钮就返回IDCANCEL。

    CFileDialog 类还有以下成员函数:

     

     通用文件对话框示例

    1. 打开VS2017,新建一个MFC单文档程序。

    2. 在IDR_MAINFRAME菜单中,新建FileDialogTest菜单及子菜单,如下:

    3. 给“保存文件”子菜单添加事件处理程序:

    代码如下:

    void CFileDialogTestView::OnSaveFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,L"All files(*.txt)|*.TXT|*.JPG|*.PNG|*.BMP||" );
    	fdlg.DoModal();
    }

     按Ctrl+F5运行程序,点击FileDialogTest菜单下的“保存文件”子菜单,弹出通用文件对话框如下:

     通用文件对话框名称是“另存为”,缺省的路径为文档库。将代码修改如下:

    void CFileDialogTestView::OnSaveFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"All files(*.txt)|*.TXT|*.JPG|*.BMP||");
    	fdlg.m_ofn.lpstrTitle = L"Save File";
    	fdlg.m_ofn.lpstrInitialDir = L"D:\\360MoveData\\Users\\lys\\Documents";
    	fdlg.DoModal();
    }

    执行同样的操作,弹出通用文件对话框如下:

    给“另存文件”子菜单添加事件处理程序:

     代码如下:

    void CFileDialogTestView::OnSaveAsFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"All files(*.txt)|*.TXT|*.JPG|*.PNG|*.BMP||");
    	fdlg.m_ofn.lpstrTitle = L"Save File As";
    	fdlg.m_ofn.lpstrInitialDir = L"D:\\360MoveData\\Users\\lys\\Documents";
    	fdlg.DoModal();
    }

    按Ctrl+F5运行程序,点击FileDialogTest菜单下的“另存文件”子菜单,弹出通用文件对话框如下:

    给“打开文件”子菜单添加事件处理程序:

     代码如下:

    void CFileDialogTestView::OnOpenFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	CFileDialog fdlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"All files(*.*)|*.*|*.JPG|*.PNG|*.BMP||");
    	fdlg.m_ofn.lpstrTitle = L"Open File";
    	fdlg.m_ofn.lpstrInitialDir = L"F:\\lesson\\Program\\c++\\MFC";
    	if (fdlg.DoModal() == IDOK)
    	{
    		CString str = fdlg.GetPathName();
    		MessageBox(str);
    		str = fdlg.GetFileName();
    		MessageBox(str);
    		str = fdlg.GetFileExt();
    		MessageBox(str);
    		str = fdlg.GetFileTitle();
    		MessageBox(str);
    		str = fdlg.GetFolderPath();
    		MessageBox(str);
    	}
    }

    按Ctrl+F5运行程序,点击FileDialogTest菜单下的“打开文件”子菜单,弹出通用文件对话框如下:

    点击【STL】C++标准程序库STL.pdf,再点击打开,弹出信息框,如下: 

    点击确定后,弹出第二个 信息框,如下:

    点击确定, 弹出第三个 信息框,如下:

     点击确定, 弹出第四个 信息框,如下:

     点击确定, 弹出第五个 信息框,如下:

    现将“保存文件”子菜单的事件处理代码,修改如下:

    void CFileDialogTestView::OnSaveFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	//CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"All files(*.txt)|*.TXT|*.JPG|*.PNG|*.BMP||");
    	CFileDialog fdlg(FALSE);
    	fdlg.m_ofn.lpstrDefExt = L"txt";
    	fdlg.m_ofn.lpstrCustomFilter = L"*.txt";
    	fdlg.m_ofn.lpstrFilter = L"*.txt";
    	fdlg.m_ofn.lpstrTitle = L"Save File";
    	fdlg.m_ofn.lpstrInitialDir = L"D:\\360MoveData\\Users\\lys\\Documents";
    	fdlg.DoModal();
    }

    按Ctrl+F5运行程序,点击FileDialogTest菜单下的“保存文件”子菜单,弹出通用文件对话框如下:

    文件名编辑框内时空的,可否给fdlg.m_ofn.lpstrFile赋值,在上面代码中加入fdlg.m_ofn.lpstrTitle = L"Save File As";

    void CFileDialogTestView::OnSaveAsFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"All files(*.txt)|*.TXT|*.JPG|*.PNG|*.BMP||");
    	fdlg.m_ofn.nMaxFile = sizeof("myfile");
    	fdlg.m_ofn.lpstrFile = L"myfile";
    	fdlg.m_ofn.lpstrTitle = L"Save File As";
    	fdlg.m_ofn.lpstrInitialDir = L"D:\\360MoveData\\Users\\lys\\Documents";
    	fdlg.DoModal();
    }

     按Ctrl+F5运行程序,点击FileDialogTest菜单下的“保存文件”子菜单,结果出现如下情况:

     在上面代码中fdlg.m_ofn.lpstrFile = L"myfile";前加入fdlg.m_ofn.nMaxFile的赋值语句,如下:

    void CFileDialogTestView::OnSaveFile()
    {
    	// TODO: 在此添加命令处理程序代码
    	//CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"All files(*.txt)|*.TXT|*.JPG|*.PNG|*.BMP||");
    	CFileDialog fdlg(FALSE);
    	fdlg.m_ofn.lpstrDefExt = L"txt";
    	fdlg.m_ofn.lpstrCustomFilter = L"*.txt";
    	fdlg.m_ofn.lpstrFilter = L"*.txt";
    	fdlg.m_ofn.lpstrTitle = L"Save File";
    	fdlg.m_ofn.nMaxFile = sizeof("myfile");
    	fdlg.m_ofn.lpstrFile = L"myfile";
    	fdlg.m_ofn.lpstrInitialDir = L"D:\\360MoveData\\Users\\lys\\Documents";
    	fdlg.DoModal();
    }

    按Ctrl+F5运行程序,点击FileDialogTest菜单下的“保存文件”子菜单,结果如下:

     不再发生错误。结果表明,要给fdlg.m_ofn.lpstrFile赋值,必须先给fdlg.m_ofn.nMaxFile赋值,否则会出错。

    展开全文
  • 易语言模块打开多文件对话框.rar
  • ImGuiFileDialog:ImGui的文件对话框:https:github.comaiekickImGuiFileDialog
  • 本代码中实现的增强型文件对话框美观实用,可以替代CFileDialog 关键字:CFileDialog,CFileDlgEx
  • 主要介绍打开文件对话框,实现对图象,文本等预览。 关键字:filedialog,preview,image,打开文件对话框,图象,预览
  • 完整版图片、文本文件对话框模块.e.rar
  • QString sPath = QFileDialog::getOpenFileName(this,"文件对话框",".","c++ files(*.cpp);;"); m_fileLineEdit->setText(sPath); } void Dialog::showColorDlg() { QColor color = QColorDialog::getColor...

    下载
    https://gitee.com/xiaozhu0809/qt-common-standards-dialog-box/tree/master/
    

    在这里插入图片描述

    1、文件对话框

    在这里插入图片描述

    #include <QFileDialog>
    // 1、父对象
    // 2、对话框标题
    // 3、默认路径,.表示当前
    // 4、c++ files(*.cpp);; 文件筛选
    // 返回值:返回选择的目录路径
    QString sPath = QFileDialog::getOpenFileName(this,"文件对话框",".","c++ files(*.cpp);;");
    
    // 要同时选择多个文件对话框
    QStringList filename = QFileDialog::getOpenFileNames(this,"文件对话框","D:","files(*.cpp);;");
    

    2、颜色对话框

    在这里插入图片描述

    #include <QColorDialog>
    #include <QColor>
    // 1、设置默认颜色为黄色
    // 返回值 color选中的颜色
    QColor color = QColorDialog::getColor(Qt::yellow);
    

    3、字体对话框

    在这里插入图片描述

    #include <QFont>
    bool ok;
    // ok 表示函数是否调用成功
    QFont font = QFontDialog::getFont(&ok);
    if(ok)
    {
    	qDebug()<<"成功";
    }
    

    demo内部代码

    void Dialog::showFileDlg()
    {
        // . 表示当前目录
        QString sPath = QFileDialog::getOpenFileName(this,"文件对话框",".","c++ files(*.cpp);;");
        m_fileLineEdit->setText(sPath);
    
    }
    
    void Dialog::showColorDlg()
    {
        QColor color = QColorDialog::getColor(Qt::yellow);
        if(color.isValid())
            // 设置调色板颜色
            m_colorFrame->setPalette(QPalette(color));
    }
    
    void Dialog::showFontDlg()
    {
        bool ok;
        QFont font = QFontDialog::getFont(&ok);
        // 判断是否成功
        if(ok)
        {
            m_fontLineEdit->setFont(font);
        }
    }
    
        m_colorFrame->setFrameStyle(QFrame::Box);
        // 可以填充背景
        m_colorFrame->setAutoFillBackground(true);
    

    4、标准输入对话框

    4.1、标准字符串输入对话框

    在这里插入图片描述

    bool ok;
    // 1、父对象
    // 2、窗体标题
    // 3、对话框标题
    // 4、QLineEdit::Normal 普通对话框
    // 5、m_nameLabel->text() 设置默认值
    // ok 函数调用是否成功
    QString str = QInputDialog::getText(this,"标准字符串输入对话框","编辑姓名:",QLineEdit::Normal,m_nameLabel->text(),&ok);
    if(ok&&!str.isEmpty())  // isEmpty 空就返回true
    {
    	qDebug()<<"成功";
    }
    

    4.2、标准int数据类型对话框

    在这里插入图片描述

    // 1、指定父窗体
    // 2、设置窗体标题
    // 3、设置标题
    // 4、设置默认年龄
    // 5、0设置最小值
    // 6、120设置最大值
    // 7、每次增长
    // 8、函数是否调用成功
    bool ok;
    int age = QInputDialog::getInt(this,"标准int数据类型对话框","选择年龄",m_ageLabel->text().toUInt(),0,120,1,&ok);
    if(ok)
        qDebug()<<"成功";
    

    4.3、标准条目输入对话框

    在这里插入图片描述

    QStringList sexList;
    sexList<<"男"<<"女"<<"未知";
    // 1、指定父窗体
    // 2、设置窗体标题
    // 3、设置标题
    // 4、设置条目
    // 5、0 默认选中第一个
    // 6、是否可以编辑
    // 7、ok是否调用成功
    bool ok;
    QString sexStr = QInputDialog::getItem(this,"标准条目输入对话框","选择性别:",sexList,0,false,&ok);
    if(ok&&!sexStr.isEmpty())
    {
        qDebug()<<"成功";
    }
    

    4.4、标准double输入框

    在这里插入图片描述

    // 1、指定父窗体
    // 2、设置窗体标题
    // 3、设置标题
    // 4、设置默认值
    // 5、0设置最小值
    // 6、100设置最大值
    // 7、设置精度
    // 8、函数是否调用成功
    bool ok;
    double score = QInputDialog::getDouble(this,"标准double输入框","请打分:",m_scoreLabel->text().toDouble(),0,100,1,&ok);
    if(ok)
        qDebug()<<"成功";
    

    5、进度条对话框

    在这里插入图片描述

    #include <QDebug>
    #include <QProgressDialog>
    #include <QCoreApplication>
    
    	QProgressDialog dialog("文件复制进度", "取消", 0, 50000, this);
    	dialog.setWindowTitle("进度对话框");	// 设置对话框标题
    	dialog.setWindowModality(Qt::WindowModal);	// 设置对话框为模态
    	dialog.show();	// 显示
    	for(int i=0;i<50000;i++)	// 模拟文件拷贝
    	{
    		dialog.setValue(i);	// 设置进度条当前值
    		QCoreApplication::processEvents();	// 避免窗口冻结
    		if (dialog.wasCanceled()) break;	// 按下取消按钮则中断
    
    
    	}
    	dialog.setValue(50000); // 这样才能显示100% 因为for少了一个数
    	qDebug() << "复制结束";
    

    6、错误对话框

    在这里插入图片描述

    #include <QErrorMessage>
    QErrorMessage* errordlg = new QErrorMessage(this);
    errordlg->setWindowTitle("错误对话框");
    errordlg->showMessage("这里是出错信息");
    

    7、向导对话框

    在这里插入图片描述

    #include <QWizard>
    QWizardPage * QtText::createPage1()
    {
    	QWizardPage* page = new QWizardPage;
    	page->setWindowTitle("介绍");
    	return page;
    }
    
    QWizardPage * QtText::createPage2()
    {
    	QWizardPage* page = new QWizardPage;
    	page->setWindowTitle("用户选择信息");
    	return page;
    }
    
    QWizardPage * QtText::createPage3()
    {
    	QWizardPage* page = new QWizardPage;
    	page->setWindowTitle("结束");
    	return page;
    }
    
    
    QWizard wizard(this);
    wizard.setWindowTitle("向导对话框");
    wizard.addPage(createPage1());	// 添加向导页面
    wizard.addPage(createPage2());	// 添加向导页面
    wizard.addPage(createPage3());	// 添加向导页面
    wizard.exec();
    

    8、消息对话框

    8.1、问题消息框

    在这里插入图片描述

    // 1、指定父对象
    // 2、窗体标题
    // 3、对话框内容
    // 4、两个按钮
    // 5、默认选中
    int res = QMessageBox::question(this,"问题消息框","您已打开问题消息框,是否关闭",
                          QMessageBox::Ok|
                          QMessageBox::Cancel,
                          QMessageBox::Ok);
    switch(res)
    {
        case QMessageBox::Ok:
            m_tipLabel->setText("问题消息框-确定");
            break;
        case QMessageBox::Cancel:
            m_tipLabel->setText("问题消息框取消");
            break;
    }
    

    8.2、信息消息框

    在这里插入图片描述

    
        // 1、指定父对象
        // 2、窗体标题
        // 3、对话框内容
        QMessageBox::information(this,"信息提示框","这是信息提示框");
    

    8.3、警告消息框

    在这里插入图片描述

        int res = QMessageBox::warning(this,"警告消息框","您有未保存的数据,是否保存",
                             QMessageBox::Save|
                             QMessageBox::Discard|
                             QMessageBox::Cancel,
                             QMessageBox::Save);
        switch(res)
        {
            case QMessageBox::Save:
                m_tipLabel->setText("警告消息框-保存");
                break;
            case QMessageBox::Discard:
                m_tipLabel->setText("警告消息框-忽略");
                break;
            case QMessageBox::Cancel:
                m_tipLabel->setText("警告消息框-取消");
                break;
        }
    

    8.4、错误消息框

    在这里插入图片描述

    
        QMessageBox::critical(this,"错误消息框","发生大错误");
    

    8.5、关于Qt消息框

    在这里插入图片描述

     
        QMessageBox::aboutQt(this,"关于消息框Qt");
    

    8.6、关于消息对话框

    在这里插入图片描述

        QMessageBox::about(this,"关于消息框","这是关于消息框");
    

    8.7、自定义消息对话框

    在这里插入图片描述

        QMessageBox customMsgBox;
        customMsgBox.setWindowTitle("自定义消息对话框");
    
        // 添加按钮
        QPushButton* yes = customMsgBox.addButton("yes",QMessageBox::ActionRole);
        QPushButton* no = customMsgBox.addButton("no",QMessageBox::ActionRole);
        QPushButton* cancel = customMsgBox.addButton(QMessageBox::Cancel);
    
        // 设置图标
        customMsgBox.setIconPixmap(QPixmap("E:\\Users\\ljc\\Documents\\DialogTest\\1.png"));
        customMsgBox.exec();
    
        // 判断点击按钮
        if(customMsgBox.clickedButton() == yes)
        {
            m_customLabel->setText("点击yes");
        }
        else if(customMsgBox.clickedButton() == no)
        {
            m_customLabel->setText("点击no");
        }
        else
        {
            m_customLabel->setText("点击cancel");
        }
    
    展开全文
  • Windows 2000有个新的“Open”对话框,这个对话框的左边有一个Places Bar,要想让这个对话框出现,必须在::GetOpenFileName函数中传递OPENFILENAME结构,这个结构隐藏在MFC的CFileDialog类中...... 关键字:...
  • VC 重载打开文件对话框,添加删除按钮,实现思路:设置文件对话框的模板为IDD_MYFILEDLG,使用GetPathName();获取选中文件。打开文件对话框是这样实现的:  if( filedlg.DoModal ()==IDOK )//打开文件对话框  {  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 536,213
精华内容 214,485
关键字:

文件对话框