// 判断是否为多选 bool isMultiSelect = !_fileModel->getCheckedIndexes().isEmpty(); if(!isMultiSelect) { auto index = search->mapToSource(_dirView->currentIndex()); if(!index.isValid()) { return; } auto filePath = _fileModel->filePath(index); auto fileInfo = _fileModel->fileInfo(index); if(fileInfo.isDir()) { if(!canDeleteFolder(filePath)) return; } else { if(!canDeleteFile(filePath)) return; } } else { QSet<QPersistentModelIndex> checkedIndexes = _fileModel->getCheckedIndexes(); foreach (QPersistentModelIndex modelIndex, checkedIndexes) { if(_fileModel->fileInfo(modelIndex).isDir()) { if(!canDeleteFolder(_fileModel->fileInfo(modelIndex).absoluteFilePath())) return; } else { if(!canDeleteFile(_fileModel->fileInfo(modelIndex).absoluteFilePath())) return; } } }
时间: 2024-04-27 08:19:19 浏览: 14
这段代码的主要作用是在删除文件或文件夹之前,先进行相关的检查,以确保删除操作是有效的。
首先,代码会判断当前是否为多选模式。如果是,则获取所有被选中的文件或文件夹,并依次进行检查。否则,代码会获取当前选中的文件或文件夹,并进行检查。
对于每个被选中的文件或文件夹,代码会首先判断其是否为文件夹。如果是,则调用canDeleteFolder函数进行检查。如果canDeleteFolder函数返回False,则表示该文件夹无法被删除,代码直接返回。如果该文件夹可以被删除,则继续进行后续的检查。
如果当前选中的是一个文件,则调用canDeleteFile函数进行检查。如果canDeleteFile函数返回False,则表示该文件无法被删除,代码直接返回。如果该文件可以被删除,则继续进行后续的检查。
如果所有被选中的文件或文件夹均可以被删除,则代码会继续执行删除操作。
相关问题
bool ff(int number,int size)//首次适应算法 { pNod temp= new Free_Node; Free_Node *p=headNode->next; //从首节点开始 temp->date.number=number; temp->date.size=size; temp->date.flag=BUSY; while(p) { if (p->date.flag==FREE && p->date.size == size )//请求大小刚好满足 { p->date.flag=BUSY; p->date.number=number; return true; } if (p->date.flag==FREE && p->date.size>size)//说明还有其他的空闲区间 { temp->next=p; temp->prior=p->prior; temp->date.begin_address=p->date.begin_address; p->prior->next=temp; p->prior=temp; p->date.begin_address=temp->date.begin_address+temp->date.size;//空闲分区开始地址+此次分配的空间 p->date.size-=size; //分配空闲作业 return true; } p=p->next; } return false; }改为最差适应算法
将该函数改为最差适应算法的代码如下所示:
```
bool wf(int number, int size) {
Free_Node* temp = new Free_Node;
Free_Node* p = headNode->next;
Free_Node* worst_node = nullptr; // 最差适应算法需要记录最大空闲区间
int max_size = -1; // 最差适应算法需要记录最大空闲区间的大小
temp->date.number = number;
temp->date.size = size;
temp->date.flag = BUSY;
while (p) {
if (p->date.flag == FREE && p->date.size >= size) { // 如果空闲区间大小满足要求
if (p->date.size > max_size) { // 找到更大的空闲区间
max_size = p->date.size;
worst_node = p;
}
}
p = p->next;
}
if (worst_node) { // 找到了空闲区间
temp->next = worst_node;
temp->prior = worst_node->prior;
temp->date.begin_address = worst_node->date.begin_address;
worst_node->prior->next = temp;
worst_node->prior = temp;
worst_node->date.begin_address = temp->date.begin_address + temp->date.size;
worst_node->date.size -= size;
worst_node->date.flag = FREE;
return true;
}
return false;
}
```
需要注意的是,最差适应算法需要记录最大空闲区间,因此在遍历空闲区间时需要记录当前的最大空闲区间。
#include <iostream> using namespace std; typedef int Elemtype1; typedef struct { Elemtype1 coef; int exp; }Elemtype; typedef struct LNode { Elemtype data; LNode *next; }*Poly; void Initlist(Poly &pa); void Input(Poly &pa); void Output(Poly &pa); void Add(Poly &pa,Poly &pb); int main() { Poly po1,po2; Initlist(po1); Initlist(po2); Input(po1); Input(po2); Output(po1); Output(po2); Add(po1,po2); Output(po1); } void Initlist(Poly &pa) { pa=new LNode; pa->next=pa; } void Input(Poly &pa) { LNode *r,*s; r=pa; Elemtype1 x; int z; cout<<"input coef,exp,exp==-1 will be end.\n"; while(1)//循环 { cin>>x>>z; if(z==-1) break;//如果z=-1 s=new LNode; s->data.coef=x; s->data.exp=z;//新节点s,data系数 为x,指数为z r->next=s;//r的后继为s r=s; } r->next=pa; } void Output(Poly &pa) { LNode *p=pa->next; bool start=true; while(p!=pa) { if(!start) { if(p->data.coef>0) cout<<"+"; } if(p->data.exp==0) cout<<p->data.coef; if(p->data.exp!=0&&!(p->data.coef==1||p->data.coef==-1)) cout<<p->data.coef; if(p->data.exp!=0&& p->data.coef==-1) cout<<"-"; if(p->data.exp!=0) { cout<<"X"; if(p->data.exp!=1) cout<<"^"<<p->data.exp; } start=false; p=p->next; } cout<<endl; } void Add(Poly &pa,Poly &pb) { LNode *p,*q,*r,*qd; p=pa->next; q=pb->next; r=pa; while(p!=pa&&q!=pb) { if(p->data.exp<q->data.exp) { r->next=p; r=p;p=p->next; } else if(p->data.exp>q->data.exp) { r->next=q; r=q;q=q->next; } else { p->data.coef=p->data.coef+q->data.coef; if(p->data.coef!=0) { r->next=p; r=p;p=p->next; } else { qd=p;p=p->next; delete qd; } qd=q; q=q->next; delete qd; } } if(p!=pa) r->next=p; else { while(q!=pb) { r->next=q; r=q;q=q->next; } r->next=pa; } qd=q; delete qd; }这段代码的每一行注释
这段代码的每一行注释如下:
```C++
#include <iostream>
using namespace std;
//定义多项式项的数据类型
typedef int Elemtype1;
typedef struct {
Elemtype1 coef; //系数
int exp; //指数
}Elemtype;
//定义多项式的结构体
typedef struct LNode {
Elemtype data; //数据域为多项式项
LNode *next; //指向下一个结点的指针
}*Poly;
//初始化多项式
void Initlist(Poly &pa);
//输入多项式
void Input(Poly &pa);
//输出多项式
void Output(Poly &pa);
//多项式相加
void Add(Poly &pa,Poly &pb);
int main() {
Poly po1,po2;
//初始化两个多项式
Initlist(po1);
Initlist(po2);
//输入两个多项式
Input(po1);
Input(po2);
//输出两个多项式
Output(po1);
Output(po2);
//将两个多项式相加
Add(po1,po2);
//输出相加后的多项式
Output(po1);
}
//初始化多项式
void Initlist(Poly &pa) {
pa=new LNode;
pa->next=pa;
}
//输入多项式
void Input(Poly &pa) {
LNode *r,*s;
r=pa;
Elemtype1 x;
int z;
cout<<"input coef,exp,exp==-1 will be end.\n";
while(1) { //循环
cin>>x>>z;
if(z==-1) break; //如果z=-1
s=new LNode;
s->data.coef=x; //新节点s,data系数 为x
s->data.exp=z; //新节点s,data指数 为z
r->next=s; //r的后继为s
r=s; //r指向新的尾结点
}
r->next=pa; //循环链表
}
//输出多项式
void Output(Poly &pa) {
LNode *p=pa->next;
bool start=true;
while(p!=pa) {
if(!start) {
if(p->data.coef>0) cout<<"+";
}
if(p->data.exp==0) cout<<p->data.coef;
if(p->data.exp!=0&&!(p->data.coef==1||p->data.coef==-1)) cout<<p->data.coef;
if(p->data.exp!=0&& p->data.coef==-1) cout<<"-";
if(p->data.exp!=0) {
cout<<"X";
if(p->data.exp!=1) cout<<"^"<<p->data.exp;
}
start=false;
p=p->next;
}
cout<<endl;
}
//多项式相加
void Add(Poly &pa,Poly &pb) {
LNode *p,*q,*r,*qd;
p=pa->next;
q=pb->next;
r=pa;
//当p和q同时不为空时,进行循环
while(p!=pa&&q!=pb) {
if(p->data.exp<q->data.exp) { //p的指数小于q的指数
r->next=p; r=p;p=p->next;
}
else if(p->data.exp>q->data.exp) { //p的指数大于q的指数
r->next=q; r=q;q=q->next;
}
else { //p的指数等于q的指数
p->data.coef=p->data.coef+q->data.coef;
if(p->data.coef!=0) { //系数不为0,将p移向下一个结点
r->next=p; r=p;p=p->next;
}
else { //系数为0,删除p结点
qd=p;p=p->next; delete qd;
}
qd=q; q=q->next; delete qd;
}
}
if(p!=pa) r->next=p; //链表pa中还有结点未遍历完
else { //链表pb中还有结点未遍历完
while(q!=pb) {
r->next=q; r=q;q=q->next;
}
r->next=pa;
}
qd=q; delete qd;
}
```