九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
QT重寫filedialog文件對話框

1.文檔目的

數(shù)碼相框程序在經(jīng)過qt-embedded交叉編譯之后,移植到開發(fā)板上發(fā)現(xiàn)當(dāng)打開open鍵選擇新圖片文件夾路徑時出現(xiàn)段錯誤。經(jīng)過查找資料后分析得出,qtQFileDialog在非X-server環(huán)境下無法初始化,因?yàn)槠湓诔跏蓟瘯r需調(diào)用本地文件對話框。所以為了實(shí)現(xiàn)數(shù)碼相框可選擇新圖片文件夾路徑的功能,需要根據(jù)程序需要重寫QFileDialog。

2.實(shí)現(xiàn)過程

1) 文件對話框設(shè)計圖1如下:

文件對話框

2) 功能設(shè)計如下:

a. 當(dāng)數(shù)碼相框程序點(diǎn)擊open鍵之后,彈出文件對話框;

b. 通過文本框中顯示當(dāng)前選中文件夾路徑;

c. 通過點(diǎn)擊OK鍵實(shí)現(xiàn)將文本框中路徑設(shè)置為新圖片文件夾路徑;

d. 通過點(diǎn)擊Cancle鍵實(shí)現(xiàn)取消選擇功能;

e. 通過單擊文件夾列表中文件夾將焦點(diǎn)移植該文件夾,并在文本框中顯示改文件夾全路徑;

f. 通過雙擊文件夾列表中文件夾實(shí)現(xiàn)進(jìn)入該文件夾并更新文件夾列表信息;

g. 通過雙擊文件夾列表中的“·”文件夾選擇當(dāng)前目錄;

h. 通過雙擊文件夾列表中的“··”文件夾返回上一級。

3) 實(shí)現(xiàn)代碼:

  1. #include <QtGui>  
  2. #include <QDebug>  
  3. #include <QFileInfo>  
  4. #include <QListWidgetItem>  
  5. #include <QIcon>  
  6. #include "filedialog.h"  
  7. FileDialog::FileDialog(QWidget *parent)  
  8.   : QWidget(parent)  
  9. {  
  10.   //Dialog布局  
  11.   setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);  
  12.   resize(320, 240);  
  13.   this->move(0,0);  
  14.   dir_name_edit=new QLineEdit;  
  15.   ok_button=new QPushButton(tr("&Ok"));  
  16.   cancel_button=new QPushButton(tr("&Cancle")) ;  
  17.   QHBoxLayout *belowlayout=new QHBoxLayout;  
  18.   belowlayout->addWidget(dir_name_edit);  
  19.   belowlayout->addWidget(ok_button);  
  20.   belowlayout->addWidget(cancel_button);  
  21.   dir_name_edit->setText(dir);  
  22.   dir_list=new QListWidget;  
  23.   dir_list->setViewMode(QListView::ListMode);  
  24.   dir_list->setMovement(QListView::Static);  
  25.   dir_list->setResizeMode(QListView::Fixed);  
  26.   dir_list->setFocusPolicy(Qt::NoFocus);  
  27.   QGridLayout *layout=new QGridLayout;  
  28.   layout->addLayout(belowlayout,0,0,1,3);  
  29.   layout->addWidget(dir_list,1,0,3,3);  
  30.   this->setLayout(layout);  
  31.     
  32.   //顯示根目錄文件夾列表  
  33.   dir="/";  
  34.   dirlist<<dir;  
  35.   num=0;  
  36.   QDir picdir(dir);  
  37.   picdir.setFilter(QDir::Dirs|QDir::NoDotAndDotDot);  
  38.   QFileInfoList list = picdir.entryInfoList();  
  39.   for(int i=0;i<list.size();i++)  
  40.   {  
  41.       QFileInfo fileInfo0 = list.at(i);  
  42.       QString path=fileInfo0.filePath();  
  43.       path.replace(dir, QString(""));  
  44.       path=path.remove(QChar('/'),Qt::CaseInsensitive);  
  45.       QListWidgetItem *item = new QListWidgetItem;  
  46.       item->setIcon(QIcon(":/folder.png"));  
  47.       item->setText(path);  
  48.       dir_list->insertItem((i+1),item);  
  49.   }  
  50.   //建立信號槽  
  51.   connect(dir_list,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(oneClick(QListWidgetItem*)));  
  52.   connect(dir_list,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(doubleClick(QListWidgetItem*)));  
  53.   connect(ok_button,SIGNAL(clicked()),this,SLOT(chooseNewDir()));  
  54.   connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancleChoose()));  
  55. }  
  56. //單擊文件夾列表  
  57. void FileDialog::oneClick(QListWidgetItem* item_new)  
  58. {  
  59.   qDebug("oneClick(QListWidgetItem* item_new)");  
  60.   QString dir_name1;  
  61.   dir_name1=item_new->text();  
  62.   //dir_name_edit->setText(dir_name1);  
  63.   if(dir_name1==".")  
  64.   {  
  65.       qDebug(".");  
  66.       dir_name_lineE=dir;  
  67.   }  
  68.   else if(dir_name1=="..")  
  69.   {  
  70.       qDebug("..");  
  71.       dir_name_lineE=dirlist.at(num-1);  
  72.   }  
  73.   else  
  74.   {  
  75.       qDebug("filedir");  
  76.       dir_name_lineE=dir;  
  77.       if(dir_name_lineE!="/")  
  78.       {  
  79.           dir_name_lineE+="/";  
  80.       }  
  81.       dir_name_lineE+=dir_name1;  
  82.   }  
  83.   dir_name_edit->setText(dir_name_lineE);  
  84.   qDebug()<<dir_name_lineE;  
  85. }  
  86. //雙擊文件夾列表  
  87. void FileDialog::doubleClick(QListWidgetItem* item_new)  
  88. {  
  89.   qDebug("onetwo");  
  90.   QString dir_name2;  
  91.   dir_name2=item_new->text();  
  92.   if(dir_name2==".")  
  93.   {  
  94.       qDebug(".");  
  95.       qDebug()<<dir;  
  96.       qDebug()<<dir_name0;  
  97.       dir_name0=dir;  
  98.   }  
  99.   else if(dir_name2=="..")  
  100.   {  
  101.       qDebug("..");  
  102.       num--;  
  103.       dir_name0=dirlist.at(num);  
  104.       QStringList dirlist_cache;  
  105.       for(int i=0;i<=num;i++)  
  106.       {  
  107.           dirlist_cache<<dirlist.at(i);  
  108.           qDebug()<<dirlist.at(i);  
  109.       }  
  110.       dirlist.clear();  
  111.       dirlist<<dirlist_cache;  
  112.       dir=dir_name0;  
  113.       qDebug("num..=%d",num);  
  114.   }  
  115.   else  
  116.   {  
  117.       qDebug("filedir");  
  118.       dir_name0=dir;  
  119.       if(dir_name0!="/")  
  120.       {  
  121.           dir_name0+="/";  
  122.       }  
  123.       dir_name0+=dir_name2;  
  124.       dir=dir_name0;  
  125.       dirlist<<dir;  
  126.       num++;  
  127.       qDebug("num-file=%d",num);  
  128.   }  
  129.   QDir picdir(dir);  
  130.   if(dir=="/")  
  131.   {  
  132.       picdir.setFilter(QDir::Dirs|QDir::NoDotAndDotDot);  
  133.   }  
  134.   else  
  135.   {  
  136.       picdir.setFilter(QDir::Dirs);  
  137.   }  
  138.   QFileInfoList list = picdir.entryInfoList();  
  139.   dir_list->clear();  
  140.   for(int i=0;i<list.size();i++)  
  141.   {  
  142.       QFileInfo fileInfo0 = list.at(i);  
  143.       QString path=fileInfo0.filePath();  
  144.       path.replace(dir, QString(""));  
  145.       path=path.remove(QChar('/'),Qt::CaseInsensitive);  
  146.       QListWidgetItem *item = new QListWidgetItem;  
  147.       item->setIcon(QIcon(":/folder.png"));  
  148.       item->setText(path);  
  149.       dir_list->insertItem((i+1),item);  
  150.   }  
  151. }  
  152. //OK鍵選擇返回新圖片文件夾路徑  
  153. void FileDialog::chooseNewDir()  
  154. {  
  155.   qDebug("chooseNewDir()");  
  156.   qDebug()<<dir_name_lineE;  
  157.   emit newDir(dir_name_lineE);  
  158.   this->close();  
  159. }  
  160. //Cancle取消選擇文件夾  
  161. void FileDialog::cancleChoose()  
  162. {  
  163.   qDebug("cancleChoose()");  
  164.   QString nullDir=NULL;  
  165.   qDebug()<<nullDir;  
  166.   emit newDir(nullDir);  
  167.   this->close();  
  168. }  


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PHP 遍歷文件夾
QT中DBus的用法
qt 接口(轉(zhuǎn))
利用VBA實(shí)現(xiàn)批量打印的思路
判斷文件夾存在
Qt如何進(jìn)行MD5加密
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服