利用QDialog切换上级目录

由于项目需求,返回上两级目录,切换料号进行数据分析,以下是通过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) {
            //要实现的功能
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值