导入项目
之前我们创建一个相册项目是通过向导设置项目名称和路径,再选择指定文件夹内容导入到我们的项目路径,并且copy文件的。这次要做的功能是直接打开一个文件夹,将文件夹内容直接展示在左侧目录树中。
连接打开信号
在mainwindow构造函数里添加打开项目的信号和槽函数
1 | //打开项目动作 |
当我们点击打开项目时触发SlotOpenPro函数
1 | void MainWindow::SlotOpenPro(bool) |
该函数打开一个文件对话框,根据选择的文件夹返回我们要打开的路径,然后将这个路径用SigOpenPro信号发送出去。
会触发ProTreeWidget的SlotOpenPro函数
1 | void ProTreeWidget::SlotOpenPro(const QString& path) |
上述逻辑中,我们创建了一个进度对话框,以及一个线程OpenTreeThread,并让他们通信,更新进度框进度以及完成情况。
设计打开逻辑线程类
线程构造函数
1 | OpenTreeThread::OpenTreeThread(const QString &src_path, int &file_count, |
_bstop表示是否终止线程。
_src_path表示打开的文件路径。
_file_count表示文件数量。
_root表示ProTreeItem类型的根节点。
_self表示ProTreeWidget类型的对象。
程序启动后执行run函数
1 | void OpenTreeThread::run() |
run函数内调用OpenProTree导入逻辑生成目录树,然后判断_bstop是否为真并且root有效,说明取消了导入操作,所以删除目录树。
当执行完导入操作后发送完成信号SigFinishProgress。
1 | void OpenTreeThread::OpenProTree(const QString &src_path, |
OpenProTree创建了根节点,然后调用了递归函数RecursiveProTree递归创建子节点。
1 | void OpenTreeThread::RecursiveProTree( const QString &src_path, int &file_count, QTreeWidget *self, |
这样完成了打开一个文件夹生成项目的功能。
幻灯片SlideShowDlg类的ui设计
我们创建一个名字为SlideShowDlg设计师界面类,然后在ui文件里添加两个QWidget,分别命名为preShow和slideShow。
1 将SlideShowDlg设置为垂直布局,将拉伸比例设置为7比1,这样整体的布局被分为两部分,上部分为slideShow,下部分为preShow,slideShow设置为网格布局,preShow设置为垂直布局。
2 在slideShow里添加两个固定宽度为80像素的widget(slidenextwid和slideprewid),这个两个widget设置为垂直布局,分别在widget里添加button(slidenextBtn和slidepreBtn),
3 在slideShow里添加一个水平布局放在右上角,然后在该布局里添加两个按钮(closeBtn和playBtn)。
4 在slideShow里添加一个widget(命名为picAnimation)设置为网格布局
5 在preShow中添加一个高度固定为120的widget,让其宽度自适应,该widget设置为网格布局,在该widget内部添加一个widget命名为preListWidget,主要用来展示预览图。
幻灯片界面ui如下
布局信息如下
因为布局信息里对widget提升了,比如PicAnimationWid,PicButton,PreListWid等,交给后一篇讲述。