Qt实战项目学习3———简易计算器

一.界面设计

界面设计多使用编辑器

在整个窗口中改变样式表可以实现所有按钮格式变化,具体如下

//按钮的字体及背景颜色设置
QPushButton

{
    
	
font: 12pt "Microsoft YaHei UI";
	
background-color: rgb(255, 255, 255);

}


//按钮鼠标悬停颜色及边框设置
QPushButton:hover

{
    border:1px solid rg b(193,193,193);
	
     background-color: rgb(221, 223, 221);

}

效果如下

 二.计算功能实现

1.首先初始化。页面按钮较多,功能重复,将页面所有按钮放入按钮组中

自定义init函数  

(除初始化以外,其他功能均写入同一自定义槽函数中。故使用if,else if)

按钮组:QButtonGroup                  寻找页面按钮:findChildren

//建立按钮组
   QButtonGroup*  buttongroup=new QButtonGroup(this);
//将按钮组中的按钮放入按钮列表中
   QList<QPushButton*>btnlist=this->findChildren<QPushButton*>();
 //遍历列表 将按钮放入按钮组中
    for(int i=0;i<btnlist.size();i++)
    {
        buttongroup->addButton(btnlist[i]);
    }

2.输入框显示功能实现,写入自定义槽函数中。

//显示功能    
    QString name=btn->text();
    if(name>="0" && name<="9" || name==".")
    {
        //点击操作符后,输入框将清空,显示下一个输入内容
        if(prebtn=="+")
        {
            ui->lineEdit->clear();
        }

        else if(prebtn=="-")
        {
            ui->lineEdit->clear();
        }

        else if(prebtn=="*")
        {
            ui->lineEdit->clear();
        }

        else if(prebtn=="/")
        {
            ui->lineEdit->clear();
        }
        ui->lineEdit->insert(name);
    }

 上一次按键的设置。(写在槽函数最末端)

 prebtn=name;

3.运算功能实现

创建QList存储数据及运算符   .h中  

  QVector<QVariant> vec;

.cpp中实现  以加法为例。 单击运算符,将操作数与运算符存进QList中

//首先将输入框中的文本数字转化为float类型 
 float val=ui->lineEdit->text().toFloat();

//如果单击了运算符按钮,将操作数与运算符存储起来
 else if(name=="+")
   {
         //把左操作数与操作符存起来
         vec[0]=val;
         vec[1]="+";
    }

单击等号,实现运算逻辑 加法为例

else if(name=="=")
{
   //将第二个操作数与等号存储进vec
        vec[2]=val;
        vec[3]="=";
        if(vec[1]=="+")
        {
             vec[4]=vec[0].toFloat()+vec[2].toFloat();
        }

   //将运算结果显示到输入框中,记得转换类型
     ui->lineEdit->setText(vec[4].toString());
} 

4.显示框中显示完整表达式

  ui->lineEdit_2->clear();
//遍历整个vec,将vec中所有内容显示
    for(auto var:vec)
    {
        ui->lineEdit_2->insert(var.toString());
    }

5.在初始化init函数中 记得关联槽函数,并resize vec

connect(buttongroup,&QButtonGroup::buttonClicked,this,&MainWindow::onButtonGroupClicked);

vec.resize(20);

三.其他功能实现

C与CE键均使用clear,以C为例

  else if(name=="C")//清空显示内容
    {
        ui->lineEdit->clear();
        ui->lineEdit_2->clear();
        vec.clear();
    }

del功能注意光标位置的调整

获取当前光标位置   setCursorPosition( int )

 else if(name=="Del")
    {
         //获取当前光标位置-1
        ui->lineEdit->setCursorPosition(ui->lineEdit->cursorPosition()-1);     
        ui->lineEdit->del();  // 执行删除
    }

简易粗糙计算器完成,但仍有许多bug,如多次运行会越界访问等问题,带继续学习完善。如有修改之处请各位指正, 多谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt是一个跨平台的C++应用程序开发框架,具有良好的可扩展性和易于使用的特点。而CSDN是一个国内知名的技术社区,提供了大量的编程教程和经验分享。 Qt项目实战CSDN可以是一个关于Qt开发的教程或者项目案例分享。在这个项目中,我会结合Qt的特点,通过撰写一系列的技术文章或者视频教程,详细介绍如何使用Qt进行应用程序的开发。 在这个项目中,我会从安装Qt开始,讲解Qt的基础知识,如界面设计、信号与槽机制、Qt对象模型等。然后,我会介绍Qt的高级特性,比如网络编程、数据库操作、多线程等。通过这些文章或者教程,读者可以系统地学习Qt的各个方面,从而快速掌握Qt的开发技巧。 同时,为了更好地帮助读者理解和学习Qt,我会结合实际的项目案例,展示如何使用Qt进行实际应用的开发。具体案例可以涵盖不同的领域,比如一个简单的音乐播放器、一个图像处理应用、一个聊天程序等。通过这些案例,读者可以更好地理解Qt的实际应用场景,并且通过参考案例代码,快速上手Qt的开发。 除了撰写技术文章或者制作视频教程,我还会积极参与到CSDN的技术社区中,回答读者的问题,与他们交流经验。这样可以进一步提升读者对于Qt开发的理解,并且根据读者的反馈,不断优化项目内容,使之更加符合读者的需求。 通过Qt项目实战CSDN,我希望能够帮助更多的开发者掌握Qt的开发技巧,实现自己的应用想法。同时,也希望能够通过与读者的交流,不断提升自己的技术水平,共同促进技术的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值