由于项目需求,返回上两级目录,切换料号进行数据分析,以下是通过QDialog容器类型组件,采用模态对话框实现功能,
Ps:
对于参数选择的对话框,一般用模态对话框
显示和不能够和父窗口进行交互
是一种阻塞式对话框调用
模态对话框通过调用exec()函数实现,使用模态对话框时,事件就在对话框内部循环,必须将对话框关闭才能执行主界面的操作。
QFileInfo fileInfo(m_sCurImgDir);
QString sParentDir = fileInfo.dir().filePath("../..");
//这里是返回上两级目录的父目录,如果只想返回上级的则是filePath("..")
QStringList lstTmp = sParentDir.split("/");
fileInfo = QFileInfo(sParentDir);
sParentDir = fileInfo.dir().filePath("..");
QString currentFolder;
if (lstTmp.count() >= 2) {
currentFolder = lstTmp.at(lstTmp.count() - 2); // 获取右边第二个元素
}
else {
currentFolder = ""; // 当元素个数不足2时返回空
}
// 获取目录下的所有文件夹
QDir dir(sParentDir);
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
// 创建QDialog对象
QDialog dialog;
dialog.setWindowTitle("请选择文件夹");//设置title
dialog.setFixedSize(240, 300);//设置尺寸
QFormLayout dialogLayout(&dialog);
// 创建QListView对象
QListView listView;
listView.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);//设置为垂直滚动条操作方式
dialogLayout.addRow(&listView);//添加到窗口中去
// 创建QStringList对象
QStringList folderList;
for (const QFileInfo& fileInfo : fileInfoList)
{
folderList << fileInfo.fileName(); //获取子目录下的文件名
}
// 创建QStringListModel对象
QStringListModel model;
model.setStringList(folderList);
listView.setModel(&model);
int idx = folderList.indexOf(currentFolder);
QModelIndex index = model.index(idx);//表示在QStringListModel中指定的索引位置
listView.setCurrentIndex(index);
// 创建确认和取消按钮
QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
Qt::Horizontal, &dialog);
dialogLayout.addRow(&buttonBox);
QObject::connect(&buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
// 显示对话框并等待用户操作
if (dialog.exec() == QDialog::Accepted) {
//要实现的功能
}