当前位置:网站首页>Qt加法计算器(简单案例)
Qt加法计算器(简单案例)
2022-07-04 22:34:00 【Yinzz2】
通过一个小案例学习Qt
实现功能1.输入两个数字,按“=”按钮显示计算结果
2.两个操作数必须都是合法的数字,拒绝接受任何非法字符
3.两个操作数必须全部合法,“=”按钮才被激活,否则禁用(不可以点击)
4.显示结果的控件只可查看不可修改,但支持复制到剪贴板
5.所有子窗口的大小和位置随主窗口的缩放自动调整至最佳
代码部分:(难点有注释)
test.h
#ifndef _TEST_H
#define _TEST_H
#include<QLabel>
#include<QLineEdit> //行编辑控件
#include<QHBoxLayout> //水平布局器
#include<QDialog>
#include<QPushButton>
#include<QDoubleValidator> //检验器
class sum:public QDialog
{
Q_OBJECT
public:
sum(void);
public slots:
void enablebutton(void);
void get_result(void);
private:
QLineEdit* edit_x;
QLineEdit* edit_y;
QLineEdit* edit_z;
QLabel* m_label;
QPushButton* m_button;
};
#endiftest.cpp
#include<test.h>
sum::sum(void)
{
/*--------****初始化各个参数****---------------*/
setWindowTitle("计算器");
edit_x = new QLineEdit(this); //this即为当前父类指针
edit_x->setAlignment(Qt::AlignLeft); //文本左对齐
edit_x->setValidator(new QDoubleValidator(this)); //设置数字验证器,只能输入数字形式内容
edit_y = new QLineEdit(this);
edit_y->setAlignment(Qt::AlignLeft);
edit_y->setValidator(new QDoubleValidator(this));
edit_z = new QLineEdit(this);
edit_z->setAlignment(Qt::AlignLeft); //设置只读
edit_z->setReadOnly(true);
m_label = new QLabel("+",this);
m_button = new QPushButton("=",this);
m_button->setEnabled(false); //一开始设置为禁用
/*--------****创建水平方向的布局器****---------------*/
QHBoxLayout* layout = new QHBoxLayout(this);
layout->addWidget(edit_x);
layout->addWidget(m_label);
layout->addWidget(edit_y);
layout->addWidget(m_button);
layout->addWidget(edit_z);
setLayout(layout); //设置布局器
/*-------********槽函数与信号******----------------*/
connect(edit_x,SIGNAL(textChanged(QString)),this,SLOT(enablebutton(void)));
connect(edit_y,SIGNAL(textChanged(QString)),this,SLOT(enablebutton(void)));
connect(m_button,SIGNAL(clicked(void)),this,SLOT(get_result(void)));
}
//text()获取输入文本(QString) toDouble()将QString转换为Double
void sum::enablebutton(void)
{
bool judge_x,judge_y;
edit_x->text().toDouble(&judge_x);
edit_y->text().toDouble(&judge_y);
m_button->setEnabled(judge_x && judge_y);
}
//number():将double转换成QString
//setText(const QString &text)
void sum::get_result(void)
{
double res = edit_x->text().toDouble() + edit_y->text().toDouble();
QString str = QString::number(res);
edit_z->setText(str);
}
main.cpp
#include<test.h>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
sum w;
w.show();
return a.exec();
}
实验现象:

边栏推荐
- [roommate learned to use Bi report data processing in the time of King glory in one game]
- vim编辑器知识总结
- A complete tutorial for getting started with redis: redis shell
- How to choose a securities company? Is it safe to open an account on your mobile phone
- Redis入门完整教程:客户端通信协议
- Google Earth engine (GEE) - tasks upgrade enables run all to download all images in task types with one click
- 【lua】int64的支持
- Sobel filter
- 攻防世界 MISC 进阶区 3-11
- Advanced area a of attack and defense world misc Masters_ good_ idea
猜你喜欢

Analysis of the self increasing and self decreasing of C language function parameters

浅聊一下中间件

Duplicate ADMAS part name

Mongodb aggregation operation summary

PMO: compare the sample efficiency of 25 molecular optimization methods

The small program vant tab component solves the problem of too much text and incomplete display

攻防世界 MISC 進階區 Erik-Baleog-and-Olaf

常用技术指标之一文读懂BOLL布林线指标

Redis入门完整教程:Bitmaps

sobel过滤器
随机推荐
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
Redis introduction complete tutorial: Collection details
Advanced area of attack and defense world misc 3-11
云服务器设置ssh密钥登录
Redis入门完整教程:Pipeline
Redis getting started complete tutorial: hash description
常用技术指标之一文读懂BOLL布林线指标
【lua】int64的支持
Redis入门完整教程:慢查询分析
mamp下缺少pcntl扩展的解决办法,Fatal error: Call to undefined function pcntl_signal()
Redis入门完整教程:Redis使用场景
记录:关于Win10系统中Microsoft Edge上的网页如何滚动截屏?
One of the commonly used technical indicators, reading boll Bollinger line indicators
A complete tutorial for getting started with redis: Pipeline
【图论】拓扑排序
攻防世界 MISC 进阶区 3-11
Redis入门完整教程:客户端通信协议
Attack and defense world misc advanced area Hong
A complete tutorial for getting started with redis: redis shell
攻防世界 MISC 进阶区 can_has_stdio?