Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631771
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:02:10

原文地址:登陆界面 作者:luozhiyong131

功能:

新建工程,新建工程时按工程名+施工单位创建目录。

删除工程,删除对应的目录和其中所有的文件


点击(此处)折叠或打开

  1. #include "login.h"
  2. #include "ui_login.h"
  3. #include <QMessageBox>
  4. #include <QDir>
  5. #include <QtDebug>


  6. /* 进行平台移植时 1为XP 0为ARM */
  7. #if 1
  8. #define FilePath "D:\\"
  9. #else
  10. #define FilePath "/home/"
  11. #endif


  12. Login::Login(QWidget *parent) :
  13.     QDialog(parent),
  14.     ui(new Ui::Login)
  15. {
  16.     ui->setupUi(this);

  17.     /* 设置tableWidget 平均分部各行 点击时选择行 */
  18.     ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //就是这个地方 均分各列
  19.     ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
  20.     ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择模式,选择单行
  21.     ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //使其不可编辑

  22.     projectNameFromFile(); /* 从文件读出工程名和施工单位并显示出来 */
  23.     ui->tableWidget->selectRow(0); // 默认选择第一行 */

  24.     logonew = new logoNew(this); /* 新建灌浆工程对话框 */
  25. }

  26. Login::~Login()
  27. {
  28.     delete ui;
  29. }


  30. /* 得到当前行的数据 工程名目录的绝对路径 */
  31. bool Login::getCurrentRow(QString *path)
  32. {
  33.     int curRow = ui->tableWidget->currentIndex().row(); //获取选中的行

  34.     *path = FilePath;
  35.     *path += ui->tableWidget->item(curRow,0)->text();
  36.     *path += "_";
  37.     *path += ui->tableWidget->item(curRow,1)->text();

  38.     return true;
  39. }

  40. /* 禁用和使能新建、打开、删除三个按建 */
  41. void Login::DisBtn(bool state)
  42. {
  43.     ui->enterBtn->setEnabled(state);
  44.     ui->delBtn->setEnabled(state);
  45.     ui->NewBtn->setEnabled(state);
  46. }

  47. /* 点击新建灌浆按钮,弹出对话框,获得工程名和施工单位 建立相应的目录*/
  48. void Login::on_NewBtn_clicked()
  49. {
  50.     DisBtn(false); // 禁用登陆界面的其它按建
  51.     logonew->show();

  52.     if(logonew->exec()== QDialog::Accepted)
  53.     {
  54.         QString str;
  55.        if(logonew->getProjectName(&str)) // 获得工程名和施工单位
  56.        {
  57.            /* 目录操作 新建工程时在 home/sd/目录下创建相应的目录 */

  58.            QDir Dir(FilePath);
  59.            if(Dir.exists(str)) // 如果文件存在
  60.                QMessageBox::information(this,tr("提示"),tr("新建工程已经存在!"));
  61.            else
  62.            {
  63.                if(!Dir.mkdir(str)) //文件不存在则创建
  64.                   qDebug() << "mkdir" << str << "failed";
  65.                else
  66.                {
  67.                    QString str1, str2;
  68.                    logonew->getAllName(&str1, &str2);

  69.                    int row=ui->tableWidget->rowCount();//获取当前行数
  70.                    ui->tableWidget->insertRow(row);
  71.                    ui->tableWidget->setItem(row,0,new QTableWidgetItem(str1));//第一行第一列的内容设置为abc
  72.                    ui->tableWidget->setItem(row,1,new QTableWidgetItem(str2));//第一行第一列的内容设置为abc
  73.                    ui->tableWidget->selectRow(row); // 选择第一行 */

  74.                    projectNameToFile(); /* 把所有的工程信息写入文件 */
  75.                 }
  76.            }
  77.        }
  78.     }

  79.     DisBtn(true); // 使能登陆界面的其它按建
  80. }

  81. /* 删除目录下所有文件 */
  82. void Login::deleteDirectory(QFileInfo fileList)
  83. {
  84.     if(fileList.isDir()){
  85.         int childCount =0;
  86.         QString dir = fileList.filePath();
  87.         QDir thisDir(dir);
  88.         childCount = thisDir.entryInfoList().count();
  89.         QFileInfoList newFileList = thisDir.entryInfoList();
  90.         if(childCount>2){
  91.             for(int i=0;i<childCount;i++){
  92.                 if(newFileList.at(i).fileName().operator ==(".")|newFileList.at(i).fileName().operator ==("..")){
  93.                     continue;
  94.                 }
  95.                 deleteDirectory(newFileList.at(i));
  96.             }
  97.         }
  98.         fileList.absoluteDir().rmpath(fileList.fileName());
  99.     }else if(fileList.isFile()){
  100.         fileList.absoluteDir().remove(fileList.fileName());
  101.     }
  102. }


  103. /* 点击删除按钮 删除数据库中信息和目录 */
  104. void Login::on_delBtn_clicked()
  105. {
  106.     QString dir;
  107.     if(!getCurrentRow(&dir)) // 获得当前要删除的文件名
  108.         return;

  109.     int curRow = ui->tableWidget->currentIndex().row(); //获取选中的行
  110.     int ok = QMessageBox::warning(this,tr("删除工程!"),tr("你确定删除当前工程?"),
  111.                                   QMessageBox::Yes,QMessageBox::No);

  112.     if(ok == QMessageBox::Yes)
  113.     {
  114.         ui->tableWidget->removeRow(curRow); /* 删除表中选中的一行 */
  115.         ui->tableWidget->selectRow(0); // 选择第一行 */

  116.         projectNameToFile(); /* 把删除后所有的工程信息写入文件 */

  117.         QFileInfo fi(dir);
  118.         deleteDirectory(fi); // 删除目录
  119.     }
  120. }

  121. /* 工程名称和施工单位写入文件 */
  122. bool Login::projectNameToFile(void)
  123. {
  124.     QString buf;
  125.     buf = FilePath;
  126.     buf += "project.init";

  127.     QFile file(buf);
  128.     if(file.open(QFile::WriteOnly | QFile::Truncate)) /* 打开文件 */
  129.     {
  130.         QTextStream init(&file);

  131.         /* 数据保存 */
  132.         int rowNum = ui->tableWidget->rowCount();

  133.         for(int i = 0; i < rowNum; i++)
  134.         {
  135.             init << ui->tableWidget->item(i,0)->text() << " ";
  136.             init << ui->tableWidget->item(i,1)->text();
  137.             init << endl;
  138.         }
  139.     }
  140.     else
  141.         fprintf(stderr, "protectedNameToFile failed \n");

  142.     file.close();

  143.     return true;
  144. }

  145. /* 从文件中读出工程名称和施工单位 */
  146. bool Login::projectNameFromFile(void)
  147. {
  148.     QString buf;
  149.     buf = FilePath;
  150.     buf += "project.init";

  151.     QFile file(buf);
  152.     if(file.open(QFile::ReadOnly)) /* 打开文件 */
  153.     {
  154.         QTextStream init(&file);

  155.         /* 数据保存 */
  156.         QString str1, str2;
  157.         while(!init.atEnd())
  158.         {
  159.             init >> str1 >> str2; /* 读出工程名和施工单位 */
  160.             if(str1.isEmpty() || str2.isEmpty()) /* 跳过最后一行的回车 */
  161.                 break;

  162.             int row=ui->tableWidget->rowCount();//获取当前行数
  163.             ui->tableWidget->insertRow(row);
  164.             ui->tableWidget->setItem(row,0,new QTableWidgetItem(str1));//第一行第一列的内容设置为abc
  165.             ui->tableWidget->setItem(row,1,new QTableWidgetItem(str2));//第一行第一列的内容设置为abc
  166.         }
  167.     }
  168.     else
  169.         fprintf(stderr, "projectNameFromFile failed \n");

  170.     file.close();

  171.     return true;
  172. }

主程序:根据选择的工程进入主程序

点击(此处)折叠或打开

  1. #include <QtGui/QApplication>
  2. #include <QTextCodec>//使能进行QTextCodec设置编码方式而支持中文
  3. #include <QtDebug>

  4. #include "widget.h"
  5. #include "login.h"

  6. int main(int argc, char *argv[])
  7. {
  8.     QApplication a(argc, argv);

  9.     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
  10.     QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
  11.     QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));


  12.     Widget w; // 主窗口
  13.     Login log; // 建立登陆界面类的对象

  14.     if(log.exec() == QDialog::Accepted) //建立自己新建的类的对象my1
  15.     {
  16.         QString str;

  17.         if(log.getCurrentRow(&str)) /* 获得当前路径名的绝对路径 */
  18.         {
  19.             qDebug() <<str;
  20.             // Widget::DirPath = str; /* 设置路径 */
  21.             // w.CreateDir(); /* 设置操作目录的路径 及初始化设置和开始界面*/

  22.             w.show(); //如果被按下,显示主窗口
  23.             return a.exec(); //如果被按下,显示主窗口
  24.         }
  25.     }
  26.     
  27.     return 0;
  28. }


工程源码: Login.rar   

阅读(180) | 评论(0) | 转发(0) |
0

上一篇:Java HelloWord

下一篇:QT 曲线绘制

给主人留下些什么吧!~~