Qt实现一个简单的应用程序——桌面助手

这篇具有很好参考价值的文章主要介绍了Qt实现一个简单的应用程序——桌面助手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、软件功能及涉及知识

1、实现不同功能之间的界面切换

2、可查看日历

3、可实现计时器功能

4、可实现计算器功能

5、ui界面及按钮部件背景的设置

6、为软件设置图标

7、程序打包成软件

二、效果演示

 Qt实现一个简单的应用程序——桌面助手

Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 三、实现过程

1、创建工程

        New Project -> Application -> Qt Widgets Application然后下一步,使用ui界面文件能省去很多步骤。

Qt实现一个简单的应用程序——桌面助手

 点击下一步、完成就创建好了一个包含.h、.cpp、.ui文件的工程。

Qt实现一个简单的应用程序——桌面助手

因为我们在不同的界面上分别实现查看日历、计时器、计算器的功能,所以还需要在工程里创建两个.h、.cpp、.ui文件,过程如下。

Qt实现一个简单的应用程序——桌面助手

Qt实现一个简单的应用程序——桌面助手

Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 直接下一步、完成就创建成功,在以同样的方式添加一个类名为MainWindow3的文件,结果如下。

Qt实现一个简单的应用程序——桌面助手

2、工程创建成功,开始实现功能

首先要确定好在哪个文件里实现什么功能,我这里是在MainWindow里实现查看日历功能,在MainWindow2里面实现计时器功能,在MainWindow3里面实现计算器功能。

然后就在对应的文件里去添加需要的控件并对界面进行合适的布局(这样到时候控件就能随着窗口的大小而变化),我的布局如下。

日历界面:

Qt实现一个简单的应用程序——桌面助手

 计时器界面:

Qt实现一个简单的应用程序——桌面助手

计算器界面:

Qt实现一个简单的应用程序——桌面助手

 需要注意每个控件对象的名称要记住不能搞混,可以在右下角的属性面板对应的objectName里查看或修改,但控件要显示的名字或内容可以直接点击控件编辑。

3、准备好这一切我们就开始编写程序

第一步、先实现实现三个界面之间可以相互切换

在上一步添加按钮的时候,可以直接右键点击对应的按钮,然后点击转到槽,因为要实现点击按钮的时候发现对应的反应,所以下一步选择clicked(),最后点击ok就会在.cpp文件中生成对应按钮的槽函数,还会在.h头文件里自动申明,我们只需要在槽函数里添加要实现的功能的代码就可以了,代码如下。

mainwindow.cpp

void MainWindow::on_pushButton_clicked()//计时器按钮生成的槽函数
{
    MainWindow2 *mainwindow2=new MainWindow2;//为 MainWindow2 窗口创建一个名字,方便操作它
    this->close();//点击计时器按钮时关闭当前界面
    mainwindow2->show();//打开窗口 mainwindow2(计时器)界面
}

void MainWindow::on_pushButton_4_clicked()//计算器按钮的槽函数
{
    MainWindow3 *mainwindow3=new MainWindow3;
    this->close();//点击计算器按钮时关闭当前界面
    mainwindow3->show();//打开窗口 mainwindow3(计算器)界面
}

mainwindow2.cpp

void MainWindow2::on_pushButton_clicked()//日历按钮生成的槽函数
{
    MainWindow *mainwindow=new MainWindow;
    this->close();//点击日历按钮后关闭当前界面
    mainwindow->show();//进入mainwindow(日历)界面
}

void MainWindow2::on_pushButton_2_clicked()//计算器按钮的槽函数
{
    MainWindow3 *mainwindow3=new MainWindow3;
    this->close();//点击计算器按钮后关闭当前界面
    mainwindow3->show();//进入mainwindow3(计算器)界面
}
}

mainwindow3.cpp

void MainWindow3::on_pushButton_clicked()//日历按钮的槽函数
{
    MainWindow2 *mainwindow2=new MainWindow2;
    this->close();//点击计时器按钮时关闭当前界面
    mainwindow2->show();//打开mainwindow2(计时器)界面
}

void MainWindow3::on_pushButton_3_clicked()//计时器按钮生成的槽函数
{
    MainWindow *mainwindow=new MainWindow;
    this->close();//点击日历按钮时关闭当前界面
    mainwindow->show();//打开mainwindow(日历)界面
}

不要忘了需要在对应的文件里添加需要切换界面对应的头文件。

第二步、每个窗口对应的功能

日历界面的功能比较简单,只是显示日历,只需要在ui文件中添加一个Calendar Widget部件就可以了。 Qt实现一个简单的应用程序——桌面助手

计时器界面需要使用到QTimer类,需要添加代码如下。

mainwindow2.h

#include <QTime>
#include <QTimer>
QTime *time;
QTimer *timer;

mainwindow2.cpp

time = new QTime;
timer = new QTimer;//创建一个定时器
ui->Timer->setDigitCount(8);//数码管需要显示8个
initTime();
connect(timer,SIGNAL(timeout()),this,SLOT(updateTime()));//信号与槽
connect(ui->pbStart,SIGNAL(clicked()),this,SLOT(pbStart_clicked()));//信号与槽
void MainWindow2::initTime()//
{
    time->setHMS(0,0,0);//设置初值
    ui->Timer->display(time->toString("hh:mm:ss"));
}
void MainWindow2::updateTime()//开始计时
{
    *time=time->addSecs(1);//每次增加1
    ui->Timer->display(time->toString("hh:mm:ss"));
}
void MainWindow2::pbStart_clicked()//start按钮生成的槽函数
{
    if(QString::compare(ui->pbStart->text(),"stop"))
    {
        initTime();//每次开始前初始化
        timer->start(1000);//每次增加时间为一秒
        ui->pbStart->setText("stop");
    }
    else
    {
        timer->stop();
        ui->pbStart->setText("start");
        //initTime();
    }
}

计算器界面,按键比较多,设置按键类名的时候尽量设计的与它的功能相近,不然写功能的时候可能会写乱,然后按钮转到槽,再编写每个按钮对应的功能,由于该部分代码比较多部分代,这里先展示一部分,完整代码后面打包发出。

mainwindow3.h

//在私有成员变量里定义号需要用到的变量
QString process;
float result;
QString S;
QString Sresult;
float sum;
int choose;
int stat;
int dot;

mainwindow3.cpp

    ui->textEdit_show->setText("请输入:");//开始时输入框中显示“请输入:”
//初始化定义好的变量
    process="";
    result = 0;
    S = "";
    stat = 0;
    choose = 0;
    sum = 0;
    dot = 0;
void MainWindow3::on_pushButton_zero_clicked()//按钮0生成的槽函数,点击0时在原来的内容上加上数字0
{
    if (-1 == stat)
       {
           result = sum;
           on_pushButton_clear_clicked();
       }
       if (0 == choose)
       {
           S += "0";
           ui->textEdit_show->setText(S);
       }
       else if (0 != choose)
       {
         process += "0";
         ui->textEdit_show->setText(process);
       }
}

数字按钮1~9的功能代码相似,都是在原来的内容上加上对应的数字。

void MainWindow3::on_pushButton_sum_clicked()//实现加法
{
    if (0 == stat || -1 == stat)
        {
            ui->textEdit_show->append("+");
        }
        sum = result;
        stat = 1;
        choose = 1;
        dot = 0;
}

void MainWindow3::on_pushButton_sub_clicked()//减法
{
    if (0 == stat || -1 == stat)
        {
            ui->textEdit_show->append("-");
        }
        sum = result;
        stat = 1;
        choose = 2;
        dot = 0;
}

void MainWindow3::on_pushButton_mul_clicked()//乘法
{
    if (0 == stat || -1 == stat)
        {
            ui->textEdit_show->append("*");
        }
        sum = result;
        stat = 1;
        choose = 3;
        dot = 0;
}

void MainWindow3::on_pushButton_div_clicked()//除法
{
    if (0 == stat || -1 == stat)
        {
            ui->textEdit_show->append("/");
        }
        sum = result;
        stat = 1;
        choose = 4;
        dot = 0;
}

void MainWindow3::on_pushButton_dot_clicked()//小数点
{
    if (0 == dot)
       {
           if (0 == choose)
           {
               S += ".";
               ui->textEdit_show->setText(S);
           }
           else if (0 != choose)
           {
               process += ".";
               ui->textEdit_show->setText(process);
           }
       }
       stat = 1;
       dot = 1;
}

void MainWindow3::on_pushButton_equal_clicked()//等于
{
    switch (choose) {
        case 1:
           result += S.toFloat() + process.toFloat();
           sum = result;

           Sresult = QString("%1").arg(result);
           ui->textEdit_show->setText(Sresult);
            break;
        case 2:
            result += S.toFloat() - process.toFloat();
            sum = result;
            Sresult = QString("%1").arg(result);
            ui->textEdit_show->setText(Sresult);
            break;
        case 3:
            if (0 == sum)
            {
                result = 1;
            }
            else
            {
                result = sum;
            }
            if (S.toFloat()*process.toFloat() != 0)
            {
                result*= S.toFloat()*process.toFloat();
                qDebug() << result << "" << sum;
            }
            else
            {
                result*= (S.toFloat() + process.toFloat());
                qDebug() << result << "" << sum;
            }
            sum = result;
            Sresult = QString("%1").arg(result);
            ui->textEdit_show->setText(Sresult);
            break;
        case 4:
            if (0 == process.toFloat())
            {
                ui->textEdit_show->setText("system error!");
                QTimer::singleShot(1000,this,SLOT(on_pushButton_clear_clicked()));
                break;
            }
            if (0 == sum)
            {
                result = 1;
            }
            else
            {
                result = sum;
            }
            if (S.toFloat()/process.toFloat() != 0)
            {
                result = S.toFloat()/process.toFloat();
                qDebug() << result << "" << sum;
            }
            else
            {
                result /= (S.toFloat() + process.toFloat());
                qDebug() << result << "" << sum;
            }
            sum = result;
            Sresult = QString("%1").arg(result);
            ui->textEdit_show->setText(Sresult);
            break;
        }
        sum = result;
        stat = -1;//如果刚按了等号又按数字,相当于做一次AC,如果按了等号再按加号,就继续计算
        choose = 0;//告诉程序类重新接受运算符
        S = "";
        process = "";
        //因为要连续计算,所以不将过程值清零
}

void MainWindow3::on_pushButton_backspace_clicked()//退格
{
    if (0 == choose)
        {
            S.chop(1);//退一格
            ui->textEdit_show->setText(S);
        }
        else if (0 != choose)
        {
            process.chop(1);
            ui->textEdit_show->setText(process);
        }
}

void MainWindow3::on_pushButton_clear_clicked()//清零
{
    result = 0;
       S = "";
       process = "";
       stat = 0;
       choose = 0;
       ui->textEdit_show->setText("请输入:");
       dot = 0;
}

void MainWindow3::on_pushButton_exit_clicked()//退出
{
    close();//直接关闭当前界面
}

第三步、对每个窗口和控件进行美化

给每个界面设置一个背景图片,首先和添加ui/h文件的方式相似,鼠标右击工程,添加新文件,后面步骤如下。

Qt实现一个简单的应用程序——桌面助手Qt实现一个简单的应用程序——桌面助手

 接着下一步、完成,然后右击刚才生成的文件 -> 添加现有文件 -> 自动打开文件之后,在里面新建一个文件,选择它打开并在里面放如我们想用的背景图片点击打开后选择Yes to All。

 Qt实现一个简单的应用程序——桌面助手

 目录上就有了刚刚选择的图片。

Qt实现一个简单的应用程序——桌面助手

 有了图片就可以到ui文件去进行设置,右击界面的空白处 -> 改变样式表 -> 下拉添加资源选择background-image -> Picture->选择图片 -> OK。

Qt实现一个简单的应用程序——桌面助手

Qt实现一个简单的应用程序——桌面助手

添加#MainWindow2表示设置为该界面主窗口的背景。

 Qt实现一个简单的应用程序——桌面助手

 然后还可以设置一下按钮的背景或颜色,做法和设置界面背景一样但设置颜色的话就下拉添加颜色。

Qt实现一个简单的应用程序——桌面助手

 第四步、为软件添加一个图标,使他看起来更像一个应用程序。

注意图标必须是以ioc为后缀的图片,操作方式如下。

在工程目录里添加我们想要的图标。

Qt实现一个简单的应用程序——桌面助手

在.pro文件中进行以下操作。

Qt实现一个简单的应用程序——桌面助手

 到这里,程序就完成的差不多了。

四、将程序打包成软件

1、把工程编译模式从debug调到release模式下,然后编译。
Qt实现一个简单的应用程序——桌面助手

 2、找到工程存放位置下,有一个release的文件夹,子文件下有个release的文件,其中就会生成一个后缀为exe的可执行文件。

3、进行封包操作,将运行程序和它需要的动态链接库封装在一起。步骤:
(1)、在英文路径下创建一个文件夹aaa(文件夹名称也要是英文的),然后找到刚才编译生成的exe文件,并将它拷贝到新创建的文件aaa下。(如果你双击执行这个程序,你会发现系统提示没有缺少的dll文件)
(2)、利用QT的windeployqt工具导入程序所需要的文件和资源。(这个程序可以直接在电脑右下角搜索qt,选择有一个黑色面板的那个)
Qt实现一个简单的应用程序——桌面助手

 在这之前需要先复制一份刚刚新建的文件夹aaa的录进。

 Qt实现一个简单的应用程序——桌面助手

 然后先进入文件所在的系统盘,我是放在桌面的就去c盘,c:加上回车键就可以了。

Qt实现一个简单的应用程序——桌面助手

然后粘贴上刚才复制的文件路径回车。

 Qt实现一个简单的应用程序——桌面助手

 在路径后面加上“windeployqt 程序名.exe”,回车进行封包操作

Qt实现一个简单的应用程序——桌面助手

 3、打包完成后,就和我们平时看到的软件一样了,可以在文件夹下直接打开那个文件了。

Qt实现一个简单的应用程序——桌面助手

 4、如果觉得文件太多,我们可以使用第三方工具将所有文件打包成一个,我这里使用的是Enigma Virtual Box。

先找到文件并打开。

Qt实现一个简单的应用程序——桌面助手

 下一步。

Qt实现一个简单的应用程序——桌面助手

 选择装整个程序的文件夹并确认。

Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 点击Files Ootions后勾上Compress  Files可以将文件压缩小一点。Qt实现一个简单的应用程序——桌面助手

 最后点击Process开始打包成一个文件。

Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 最后直接关闭,我们就可以在原来程序的文件里看到一个大概20兆的应用程序,就是刚才打包好的一个完整的应用程序(我这里将它重命名了桌面助手),可以直接放在桌面上打开。

Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

 Qt实现一个简单的应用程序——桌面助手

五、总结

 到这里这个应用程序就算是彻底完成了,通过这个项目也让我学习到了很多东西,只有自己动手了才发现原来自己也没那么差,之前是真没想到自己能做出东西来,也很感谢容容老师的教导和鼓励。最后希望这篇文章能对各位有所帮助,完整的工程文件和打包工具我会后面补上。

工程文件(包含源码和桌面助手应用程序文件):

https://download.csdn.net/download/qq_51064962/86806762

第三方打包工具Enigma Virtual Box:https://download.csdn.net/download/qq_51064962/86806787文章来源地址https://www.toymoban.com/news/detail-474106.html

到了这里,关于Qt实现一个简单的应用程序——桌面助手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt数据可视化示例01-显示实时音频数据的简单应用程序

    audiolevels 示例显示实时音频数据的简单应用程序。示例从麦克风读取音频电平, 并在条形图中显示这些电平。为了增加用于演示目的的负载,并使图形更漂亮, 使用稍作修改的数据来填充多行。 作为Qt 数据可视化的第一个示例,我们忽略数据源的获取,主要关注数据的呈现

    2024年01月18日
    浏览(67)
  • C++QT教程3——手册4.11.1自带教程(笔记)——创建一个基于Qt Widget的应用程序

    本教程介绍如何使用Qt Creator创建一个小型Qt应用程序,名为Text Finder。它是Qt UI工具中Text Finder示例的简化版本。应用程序的用户界面是使用Qt Designer通过Qt小部件构建的。应用程序逻辑是通过使用代码编辑器编写的C++代码。 选择文件 新建文件或项目 应用程序 Qt Widgets应用程序

    2024年02月13日
    浏览(50)
  • Qt 实现应用程序单实例

    目前使 Qt 运行一个实例有如下几种方式: 1.QSharedMemory 使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出;这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动。 2.文件锁 在程序运行的时候就在目录下创建一个文

    2024年02月10日
    浏览(44)
  • Fast DDS(1)编写一个简单的C++发布者和订阅者应用程序

            本次我们详细介绍如何使用C++API逐步创建一个简单的Fast DDS应用程序,其中包含发布者和订阅者。也可以使用eProsima Fast DDS-Gen工具自行生成与本节中实现的示例相类似的示例。在构建发布/订阅应用程序中解释了这种附加方法。 ​​​​​​​1.3.1  背景介绍    

    2024年02月12日
    浏览(42)
  • Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序

    Nest是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它是基于Express.js构建的,并且提供了多种新特性和抽象层,可以让开发者更加轻松地构建复杂的应用程序。 本文将介绍Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序。 模块 在Nest中,模块

    2024年02月02日
    浏览(113)
  • Qt布局实战:实现高效、美观的GUI应用程序

    Qt是一个跨平台的GUI应用程序开发框架,提供了丰富的UI控件和布局管理器来实现应用程序的用户界面设计。Qt的布局管理器(layout manager)是一种将控件组织在容器中的机制,可以自动调整控件的位置和大小,以适应不同的窗口大小和屏幕分辨率。在Qt中,常用的布局管理器包

    2023年04月18日
    浏览(44)
  • 微信小程序实现一个电影信息查询的应用程序

    这个示例展示了一个电影信息查询应用程序,包括一个输入框和一个查询按钮,用于查询指定电影的详细信息。在下方显示了电影的海报、标题、评分、类型和简介。 到这里也就结束了,希望对您有所帮助。

    2024年02月03日
    浏览(48)
  • Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序

    Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序。Spring的主要优点包括简化Java EE开发、提供依赖注入和面向切面编程等功能。以下是Spring的一些核心特性: 依赖注入(DI):Spring通过DI机制,将对象的依赖关系注入到应用程序中,简化了

    2024年02月03日
    浏览(80)
  • Qt中的配置文件:实现个性化应用程序配置与保存加载

    在现代软件开发中,用户对于应用程序的个性化配置和设置变得越来越重要。为了满足用户需求并提供更好的用户体验,开发人员常常需要实现一种机制,以便在每次启动应用程序时能够记住用户上次的配置。这样用户就可以方便地恢复到他们熟悉的环境,无需重新进行所有

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包