资源:
Qt 帮助文档
Qt5.9 c++ 开发指南 6.12
Qt之QFileDialog::getOpenFileName() 使用
打开文件
Qt 自带打开文件的接口
QFileDialog::getOpenFileName
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));
返回的是选择的文件名(包含完整路径)
遇到问题
:当打开的文件为
.zip
格式时,较大的文件(大于100M)选择比较慢,即点击文件后要过几秒才有反应(win10,Qt 5.14.2)
解决方案
:用windows自带接口
注意:获取的包含选择文件名的路径字符串为
\
而非
/
,用 Qt 的接口得到的路径分隔符为
/
示例:
QString getFileName(QString &strDir)
{
OPENFILENAME ofn; // common dialog box structure
WCHAR szFile[MAX_PATH]; // buffer for file name
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = (HWND)this->winId(); // owner window
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0'; //无初始文件名
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"*.zip\0\0"; //过滤器 最后以两个空字符结束
ofn.nFilterIndex = 1; //当前选择过滤器的索引
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
//初始文件路径
std::wstring wstrInitalDir = strDir.toStdWString();
ofn.lpstrInitialDir = (LPCWSTR)wstrInitalDir.c_str();
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
QString strName("");
// Display the Open dialog box.
if (GetOpenFileName(&ofn)==TRUE)
{
strName = QString::fromStdWString(ofn.lpstrFile);
strName = QDir::cleanPath(strName); //将windows分隔符 \ 转化为Qt分隔符 /
}
return strName;
}
获取选择的路径
使用函数:
版权声明:本文为Lee567原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。