在Qt中使用纯代码实现图片显示

一、实验目的和要求:

Qt UI编程综合训练,使学生熟练掌握常用UI组件的使用。

1.使用树形结构列表显示磁盘文件夹和图片文件。

2.使用显示控件显示图片。

3.具有基本的图片查看功能。

4.具有菜单栏和工具栏。

二、软件设计界面

三、软件源代码(源代码要有完整的注释)

  1. #include "notepad.h"  
  2. #include "ui_notepad.h"  
  3. #include<QFile>  
  4. #include<QDir>  
  5. #include<QFileDialog>  
  6. #include<QMessageBox>  
  7. #include<QScrollBar>  
  8. #include<QTextStream>  
  9. #include<QFont>  
  10. #include<QDesktopServices>  
  11. #pragma execution_character_set("utf-8")  
  12. Notepad::Notepad(QWidget *parent) :  
  13.     QMainWindow(parent),  
  14.     ui(new Ui::Notepad)  
  15. {  
  16.     ui->setupUi(this);  
  17.     setFixedSize(600,500);//设置500*400且不允许拉伸  
  18.     ui->textEdit->verticalScrollBar()->setValue(ui->textEdit->verticalScrollBar()->maximumHeight());  
  19.     isChanged=0;//构造函数初始化设置为不需要保存  
  20.     connect(ui->action_exit,SIGNAL(triggered(bool)),this,SLOT(notepad_close()));  
  21.     //每当编辑框文本发生改变时,就使编辑状态被改变  
  22.     connect(ui->textEdit,SIGNAL(textChanged()),this,SLOT(set_change_status()));  
  23.     isnew=0;//默认不是新文件  
  24.     text_type="SimSun";//默认宋体  
  25.     set_B=50;//50为正常  
  26.     size=8;//默认为8  
  27. }  
  28.   
  29. Notepad::~Notepad()  
  30. {  
  31.     delete ui;  
  32. }  
  33. void Notepad::notepad_close()  
  34. {  
  35.     if(isChanged==0)  
  36.     {  
  37.         close();  
  38.     }  
  39.     else  
  40.     {  
  41.         int ret=QMessageBox::question(NULL,"提示","要保存吗?");  
  42.         if(ret==QMessageBox::Yes)  
  43.         {  
  44.             if(isnew==1)//新文件,等于另存为的功能  
  45.             {  
  46.                 on_action_saveas_triggered();  
  47.             }  
  48.             else  
  49.             {  
  50.                 saveTextByIOStream(aFileName);//直接保存  
  51.             }  
  52.         }  
  53.         else  
  54.         {  
  55.             close();  
  56.         }  
  57.     }  
  58. }  
  59.   
  60. void Notepad::on_action_open_triggered()  
  61. {  
  62.     QString curPath=QDir::currentPath();//获取系统当前目录  
  63.         QString dlgTitle="打开一个文件"//对话框标题  
  64.         QString filter="所有文件(*.*);;文本文件(*.txt);;程序文件(*.h *.cpp)"//文件过滤器  
  65.         aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);  
  66.         if (aFileName.isEmpty())  
  67.             return;  
  68.         if(!openTextByIOStream(aFileName))  
  69.         {  
  70.             QMessageBox::warning(NULL,"警告","文件打开失败!");  
  71.   
  72.         }  
  73.   
  74. }  
  75. bool Notepad::openTextByIOStream(const QString &aFileName)  
  76. // QTextStream打开文本文件  
  77.     QFile aFile(aFileName);  
  78.        if (!aFile.exists()) //文件不存在  
  79.            return false;  
  80.        if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))  
  81.            return false;  
  82.        QTextStream aStream(&aFile); //用文本流读取文件  
  83.        ui->textEdit->setPlainText(aStream.readAll());  
  84.        aFile.close();//关闭文件  
  85.   
  86.        return  true;  
  87. }  
  88.   
  89. void Notepad::on_action_save_triggered()  
  90. {  
  91.     if(isnew==0)//正常情况下  
  92.     {  
  93.         saveTextByIOStream(aFileName);//如果不是另存为,直接用打开文件的时候获取的文件名即可。  
  94.     }  
  95.     else//用户新建文件后,点击的是保存。这里保存和另存为实现的功能是一致的  
  96.     {  
  97.         on_action_saveas_triggered();  
  98.     }  
  99. }  
  100.   
  101. void Notepad::on_action_author_triggered()  
  102. {  
  103.     QMessageBox::about(NULL,"关于","Qt记事本v1.0\n作者:吉法师");  
  104. }  
  105.   
  106.   
  107. void Notepad::on_action_saveas_triggered()  
  108. {  
  109.     QString curPath=QDir::currentPath();//获取系统当前目录  
  110.         QString dlgTitle="另存为一个文件"//对话框标题  
  111.         QString filter="文本文件(*.txt);;c++文件(*.cpp);;h文件(*.h)"//文件过滤器  
  112.        aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);  
  113.         if (aFileName.isEmpty())  
  114.             return;  
  115.      saveTextByIOStream(aFileName);  
  116. }  
  117.   
  118. void Notepad::on_action_new_triggered()  
  119. {  
  120.     if(isChanged!=0)//代表文件被修改了,理应只有0.1两种状态  
  121.     {  
  122.         int ret=QMessageBox::question(NULL,"提示","要保存吗?");  
  123.         if(ret==QMessageBox::Yes)  
  124.         {  
  125.             saveTextByIOStream(aFileName);  
  126.         }  
  127.   
  128.     }  
  129.     else//只有在先点击保存按钮后才有可能出现这种情况  
  130.     {  
  131.         ui->textEdit->setText("");  
  132.         isChanged=1;  
  133.     }  
  134.     isnew=1;//设置为新文件  
  135. }  
  136. void Notepad::set_change_status()  
  137. {  
  138.     isChanged=1;//用信号槽机制来调用本函数  
  139. }  
  140. bool Notepad::saveTextByIOStream(const QString &aFileName)  
  141. {//QTextStream保存文本文件  
  142.     QFile aFile(aFileName);  
  143.        if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))  
  144.            return false;  
  145.        QTextStream aStream(&aFile); //用文本流读取文件  
  146.        QString str=ui->textEdit->toPlainText(); //转换为字符串  
  147.        aStream<<str; //写入文本流  
  148.        aFile.close();//关闭文件  
  149.        return  true;  
  150. }  
  151.   
  152.   
  153. void Notepad::on_action_red_triggered()  
  154. {  
  155.     ui->textEdit->setTextColor(Qt::red);  
  156. }  
  157.   
  158. void Notepad::on_action_blue_triggered()  
  159. {  
  160.     ui->textEdit->setTextColor(Qt::blue);  
  161. }  
  162.   
  163. void Notepad::on_action_green_triggered()  
  164. {  
  165.     ui->textEdit->setTextColor(Qt::green);  
  166. }  
  167.   
  168. void Notepad::on_action_black_default_triggered()  
  169. {  
  170.     ui->textEdit->setTextColor(Qt::black);  
  171. }  
  172. void Notepad::closeEvent(QCloseEvent *event)  
  173. {  
  174.     notepad_close();//相当于重写了这个函数  
  175. }  
  176.   
  177. void Notepad::on_action_5_triggered()  
  178. {  
  179.     QFont font;  
  180.     if(set_l==0)  
  181.     {  
  182.         font.setItalic(true);  
  183.         set_l=1;  
  184.     }  
  185.     else  
  186.     {  
  187.         font.setItalic(false);  
  188.         set_l=0;  
  189.     }  
  190.     ui->textEdit->setFont(font);  
  191. }  
  192.   
  193. void Notepad::on_action_B_triggered()  
  194. {  
  195.     if(set_B==50)  
  196.     {  
  197.         set_B=75;//75为加粗  
  198.     }  
  199.     else  
  200.     {  
  201.         set_B=50;  
  202.     }  
  203.     set_font();  
  204. }  
  205. void Notepad::set_font()  
  206. {  
  207.     QFont font(text_type,size,set_B);//字体,大小,是否加粗  
  208.     ui->textEdit->setFont(font);  
  209. }  
  210.   
  211. void Notepad::on_action16_triggered()  
  212. {  
  213.     size=16;  
  214.     set_font();  
  215. }  
  216.   
  217. void Notepad::on_action12_triggered()  
  218. {  
  219.     size=12;  
  220.     set_font();  
  221. }  
  222.   
  223. void Notepad::on_action10_triggered()  
  224. {  
  225.     size=10;  
  226.     set_font();  
  227. }  
  228.   
  229. void Notepad::on_action8_triggered()  
  230. {  
  231.     size=8;  
  232.     set_font();  
  233. }  
  234.   
  235. void Notepad::on_action_songti_triggered()  
  236. {  
  237.     text_type="SimSun";  
  238.     set_font();  
  239. }  
  240.   
  241. void Notepad::on_action_kaiti_triggered()  
  242. {  
  243.     text_type="KaiTi";  
  244.     set_font();  
  245. }  
  246.   
  247. void Notepad::on_action_heiti_triggered()  
  248. {  
  249.     text_type="SimHei";  
  250.     set_font();  
  251. }  
  252.   
  253. void Notepad::on_action_ankai_triggered()  
  254. {  
  255.     text_type="STXingKai";  
  256.     set_font();  
  257. }  

四、关键代码流程图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值