#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTreeWidgetItem>
#include <QFileDialog>
void MainWindow::iniTree()
{ //初始化Tree
// QTreeWidgetItem *item; //节点
QString dataStr=""; // Item的Data 存储的string
ui->treeFiles->clear();//清除目录树所有节点
QIcon icon;
icon.addFile(":/images/icons/15.ico"); //设置ICON的图标
QTreeWidgetItem* item=new QTreeWidgetItem(MainWindow::itTopItem); //新建节点时设定类型为 itTopItem
item->setIcon(MainWindow::colItem,icon); //设置第1列的图标
item->setText(MainWindow::colItem,"图片文件"); //设置第1列的文字
item->setText(MainWindow::colItemType,"type=itTopItem"); //设置第2列的文字
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
item->setCheckState(colItem,Qt::Checked);//设置为选中
item->setData(MainWindow::colItem,Qt::UserRole,QVariant(dataStr)); //设置节点第1列的Qt::UserRole的Data
ui->treeFiles->addTopLevelItem(item);//添加顶层节点
}
void MainWindow::addFolderItem(QTreeWidgetItem *parItem, QString dirName)
{//添加一个目录节点
QIcon icon(":/images/icons/open3.bmp");
// icon.addFile(":/images/icons/open3.bmp"); //设置ICON的图标
QString NodeText=getFinalFolderName(dirName); //从一个完整目录名称里,获得最后的文件夹名称
QTreeWidgetItem *item; //节点
item=new QTreeWidgetItem(MainWindow::itGroupItem); //新建节点, 设定type为 itGroupItem
item->setIcon(colItem,icon); //设置图标
item->setText(colItem,NodeText); //最后的文件夹名称,第1列
// item->setText(colSecond,"type=itGroupItem; data="+dirName); //完整目录名称
item->setText(colItemType,"type=itGroupItem"); //完整目录名称,第2列
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate); //设置节点选项
item->setCheckState(colItem,Qt::Checked); //节点选中
item->setData(colItem,Qt::UserRole,QVariant(dirName)); //设置角色为Qt::UserRole的Data,存储完整目录名称
parItem->addChild(item); //在父节点下面添加子节点
}
QString MainWindow::getFinalFolderName(const QString &fullPathName)
{//从一个完整目录名称里,获得最后的文件夹名称
int cnt=fullPathName.length(); //字符串长度
int i=fullPathName.lastIndexOf("/");// 最后一次出现的位置
QString str=fullPathName.right(cnt-i-1); //获得最后的文件夹的名称
return str;
}
void MainWindow::addImageItem(QTreeWidgetItem *parItem, QString aFilename)
{//添加一个图片文件节点
QIcon icon(":/images/icons/31.ico");//ICON的图标
QString NodeText=getFinalFolderName(aFilename); //获得最后的文件名称
QTreeWidgetItem *item; //节点
item=new QTreeWidgetItem(MainWindow::itImageItem); //新建节点时设定类型为 itImageItem
item->setIcon(colItem,icon); //设置图标
item->setText(colItem,NodeText); //最后的文件夹名称
// item->setText(colSecond,"type=itImageItem; data="+aFilename); //完整目录名称
item->setText(colItemType,"type=itImageItem"); //完整目录名称
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate); //设置节点选项
item->setCheckState(colItem,Qt::Checked); //节点选中
item->setData(colItem,Qt::UserRole,QVariant(aFilename)); //设置节点Qt::UserRole的Data,存储完整文件名称
parItem->addChild(item); //在父节点下面添加子节点
}
void MainWindow::displayImage(QTreeWidgetItem *item)
{//显示图片,节点item存储的图片文件名
QString filename=item->data(colItem,Qt::UserRole).toString();//获取节点data里存的文件名
LabFileName->setText(filename);
curPixmap.load(filename); //从文件载入图片
on_actZoomFitH_triggered(); //自动适应高度显示
ui->actZoomFitH->setEnabled(true);
ui->actZoomFitW->setEnabled(true);
ui->actZoomIn->setEnabled(true);
ui->actZoomOut->setEnabled(true);
ui->actZoomRealSize->setEnabled(true);
}
void MainWindow::changeItemCaption(QTreeWidgetItem *item)
{ //改变节点的标题文字
QString str="*"+item->text(colItem); //节点标题前加“*”
item->setText(colItem,str); //设置节点标题
if (item->childCount()>0) //如果有子节点
for (int i=0;i<item->childCount();i++) //遍历子节点
changeItemCaption(item->child(i)); //调用自己,可重入的函数
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
LabFileName=new QLabel("");
ui->statusBar->addWidget(LabFileName);
this->setCentralWidget(ui->scrollArea); //设置中心布局组件
iniTree();//初始化目录树
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_treeFiles_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{ //当前节点选择变化时触发
Q_UNUSED(previous);
if (current==NULL)
return;
int var=current->type();//节点的类型
switch(var)
{
case itTopItem: //顶层节点
ui->actAddFolder->setEnabled(true);
ui->actAddFiles->setEnabled(true);
ui->actDeleteItem->setEnabled(false); //顶层节点不能删除
break;
case itGroupItem: //文件组节点
ui->actAddFolder->setEnabled(true);
ui->actAddFiles->setEnabled(true);
ui->actDeleteItem->setEnabled(true);
break;
case itImageItem: //图片文件节点
ui->actAddFolder->setEnabled(false); //图片节点下不能添加目录节点
ui->actAddFiles->setEnabled(true);
ui->actDeleteItem->setEnabled(true);
displayImage(current); //显示图片
break;
}
}
void MainWindow::on_actAddFolder_triggered()
{// 选择一个文件夹,作为当前节点的子节点加入
QString dir=QFileDialog::getExistingDirectory();//选择目录
if (!dir.isEmpty()) //选择目录名称不为空
{
// QTreeWidgetItem *parItem; //节点
QTreeWidgetItem* parItem=ui->treeFiles->currentItem(); //当前节点
addFolderItem(parItem,dir);//在父节点下面添加一个组节点
}
}
void MainWindow::on_actAddFiles_triggered()
{//添加图片文件节点
QStringList files=QFileDialog::getOpenFileNames(this,"选择一个或多个文件","","Images(*.jpg)");//多选文件
if (files.isEmpty()) //如果一个文件都没选
return;
QTreeWidgetItem *parItem,*item; //节点
item=ui->treeFiles->currentItem(); //当前节点
if (item->type()==itImageItem) //若当前节点是图片节点,取其父节点作为父节点
parItem=item->parent();
else //否则取当前节点为父节点
parItem=item;
for (int i = 0; i < files.size(); ++i)
{
QString aFilename=files.at(i); //得到StringList里的一行,也就是一个文件名
addImageItem(parItem,aFilename); //添加一个图片节点
}
}
void MainWindow::on_actZoomOut_triggered()
{ //缩小显示
pixRatio=pixRatio*0.8; //在当前比例基础上乘以0.8
int w=pixRatio*curPixmap.width();// 显示宽度
int h=pixRatio*curPixmap.height();//显示高度
QPixmap pix=curPixmap.scaled(w,h); //图片缩放到指定高度和宽度,保持长宽比例
ui->LabPicture->setPixmap(pix);
}
void MainWindow::on_actZoomIn_triggered()
{//放大显示
pixRatio=pixRatio*1.2;//在当前比例基础上乘以0.8
int w=pixRatio*curPixmap.width();// 显示宽度
int h=pixRatio*curPixmap.height();//显示高度
QPixmap pix=c
没有合适的资源?快使用搜索试试~ 我知道了~
QTreeWidget控件和QDockWidget控件组合应用示例
共155个文件
bmp:140个
ico:6个
jpg:2个
需积分: 0 6 下载量 195 浏览量
2023-12-18
10:01:27
上传
评论
收藏 63KB RAR 举报
温馨提示
实例samp4_8介绍QTreeWidget、QDockWidget的使用,以及用QLabel显示图片的方法。程序以QTreeWidget为主要组件,创建一个照片管理器。 这个实例主要演示如下几个组件的使用方法。 1.QTreeWidget目录树组件 QTreeWidget类是创建和管理目录树结构的类。实例使用一个QTreeWidget组件管理照片目录,可以添加、删除节点,每个节点设置一个自定义类型,另外,还设置了一个自定义数据,片节点存储完整文件名,以便单击节点时显示该图片。 2.QDockWidget停靠区域组件 QDockWidget是可以在QMainWindow窗口停靠,或在桌面最上层浮动的界面组件。本实例将一个QTreeWidget组件放置在区域上,设置其可以在主窗口的左或右侧停靠,也可以浮动。 3.QLabel组件显示图片 右侧是一个QScrollArea组件,ScrollArea上面放置一个QLabel组件,通过为QLabel设置一Pixmap显示图片。通过QPixmap操作可进行缩放显示,包括放大、缩小、实际大小、适合宽度、适合高度等。
资源推荐
资源详情
资源评论
收起资源包目录
QTreeWidget控件和QDockWidget控件组合应用示例 (155个子文件)
421.bmp 1KB
exit.bmp 1KB
122.bmp 1KB
preview2.bmp 1KB
317.bmp 1KB
302.bmp 1KB
428.bmp 1KB
322.bmp 1KB
419.bmp 1KB
open1.bmp 1KB
fold2.bmp 1KB
undo.bmp 1KB
328.bmp 1KB
ubdo.bmp 1KB
307.bmp 1KB
427.bmp 1KB
405.bmp 1KB
new2.bmp 1KB
431.bmp 1KB
saveall2.bmp 1KB
320.bmp 1KB
301.bmp 1KB
310.bmp 1KB
108.bmp 1KB
306.bmp 1KB
next1.bmp 1KB
413.bmp 1KB
319.bmp 1KB
129.bmp 1KB
export2.bmp 1KB
open4.bmp 1KB
323.bmp 1KB
106.bmp 1KB
409.bmp 1KB
open2.bmp 1KB
cut.bmp 1KB
424.bmp 1KB
414.bmp 1KB
314.bmp 1KB
415.bmp 1KB
316.bmp 1KB
export1.bmp 1KB
407.bmp 1KB
copy.bmp 1KB
upfold2.bmp 1KB
redo.bmp 1KB
422.bmp 1KB
105.bmp 1KB
327.bmp 1KB
304.bmp 1KB
432.bmp 1KB
329.bmp 1KB
folder2.bmp 1KB
redo2.bmp 1KB
331.bmp 1KB
124.bmp 1KB
814.bmp 1KB
802.bmp 1KB
103.bmp 1KB
410.bmp 1KB
305.bmp 1KB
131.bmp 1KB
411.bmp 1KB
128.bmp 1KB
416.bmp 1KB
upfold1.bmp 1KB
125.bmp 1KB
pre2.bmp 1KB
104.bmp 1KB
paste.bmp 1KB
401.bmp 1KB
330.bmp 1KB
300.bmp 1KB
preview1.bmp 1KB
423.bmp 1KB
folder1.bmp 1KB
save1.bmp 1KB
417.bmp 1KB
123.bmp 1KB
406.bmp 1KB
120.bmp 1KB
315.bmp 1KB
402.bmp 1KB
delfold1.bmp 1KB
309.bmp 1KB
107.bmp 1KB
311.bmp 1KB
pre1.bmp 1KB
126.bmp 1KB
418.bmp 1KB
import2.bmp 1KB
cut2.bmp 1KB
102.bmp 1KB
430.bmp 1KB
326.bmp 1KB
412.bmp 1KB
313.bmp 1KB
824.bmp 1KB
delfold2.bmp 1KB
303.bmp 1KB
共 155 条
- 1
- 2
资源评论
冷凝女子
- 粉丝: 499
- 资源: 67
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功