当前位置:网站首页>QT small case "addition calculator"
QT small case "addition calculator"
2022-07-05 07:26:00 【Cukor Chuk】
Qt Small cases 《 adder 》
Header file to be used
- QApplication
- QWidget
- QLabel
- QLineEdit
- QPushButton
- QDoubleValidator
- QHBoxLayout
Case requirements
- Implement an adder ( Simple numerical calculation )
- Horizontal layout , Can be arbitrarily scaled
- x+y=z
- x and y Accept only numbers ;z Only show x+y Result , Cannot edit
- stay x and y The content of is correct, and the equal sign button is disabled
Effect display
- x and y When there are no numbers , The equal sign button is gray ( Forbidden )
- x and y When there are numbers , The equal sign button is on ( Available )
- Press down “=” The result is calculated after the button , The result is displayed in the third blank
Source code
- main.cpp
#include <QApplication>
#include "mywidget.h" // Custom header file , The specific operations of this case are all in this
int main(int argc,char** args)
{
QApplication app(argc,args);
MyWidget w;
w.show();
return app.exec();
}
- mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget> // Control
#include <QPushButton> // Button
#include <QLabel> // label
#include <QLineEdit> // Line edit
#include <QHBoxLayout> // Horizontal layout
#include <QDoubleValidator> // Floating point number checker
class MyWidget : public QWidget
{
Q_OBJECT // Signals and slots are used , So it is Qt Yes C++ Extended grammar of English , So you need to add this macro
public:
explicit MyWidget(QWidget *parent = nullptr); // Constructor declaration
private:
QPushButton* btn; //"="
QLabel* la; //"+"
QLineEdit* x; //x+y=z
QLineEdit* y;
QLineEdit* z;
signals:
public slots: // The specified writing method of slot function
void onxyEdit(); // Respond to x and y Edit content of
void onBtn(); // Respond to "=" Button
};
#endif // MYWIDGET_H
- mywidget.cpp
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
// First initialize each component
x=new QLineEdit(this);
y=new QLineEdit(this);
z=new QLineEdit(this);
btn=new QPushButton("=",this);
la=new QLabel("+",this);
// Boxing operation
QHBoxLayout* layout=new QHBoxLayout(this);
layout->addWidget(x);
layout->addWidget(la);
layout->addWidget(y);
layout->addWidget(btn);
layout->addWidget(z);
// Set the characteristics of each component
// Right alignment
x->setAlignment(Qt::AlignRight);
y->setAlignment(Qt::AlignRight);
z->setAlignment(Qt::AlignRight);
//x,y You can only enter Numbers , The others can't
x->setValidator(new QDoubleValidator(this));
y->setValidator(new QDoubleValidator(this));
z->setReadOnly(true);
// The button is disabled at first
btn->setEnabled(false);
// Connect the signal to the slot
//x Trigger the current window when the value of onxyEdit Slot function
connect(x,SIGNAL(textChanged(const QString&)),
this,SLOT(onxyEdit()));
//y Trigger the current window when the value of onxyEdit Slot function
connect(y,SIGNAL(textChanged(const QString&)),
this,SLOT(onxyEdit()));
// Trigger the current window when the button is pressed onBtn Slot function
connect(btn,SIGNAL(clicked(void)),
this,SLOT(onBtn(void)));
}
// When this slot function is triggered, start the button
void MyWidget::onxyEdit()
{
bool xok,yok;
x->text().toDouble(&xok); // If you succeed QString Turn into double be xok==true, otherwise xok==false
y->text().toDouble(&yok); // If you succeed QString Turn into double be yok==true, otherwise yok==false
btn->setEnabled(xok && yok);// If xok and yok All for true be btn The button is activated ( Disable status )
}
// This slot function triggers the calculation of demerits to z In the box
void MyWidget::onBtn()
{
// First convert strings into numbers and then add
double result=x->text().toDouble()+y->text().toDouble();
// The content displayed in the window must be a string , So when the result is calculated, you need to convert the number into a string
QString str=QString::number(result);
// Finally, give the result to z
z->setText(str);
}
边栏推荐
- Unity UGUI不同的UI面板或者UI之间如何进行坐标匹配和变换
- Unconventional ending disconnected from the target VM, address: '127.0.0.1:62635', transport: 'socket‘
- Energy conservation and creating energy gap
- SOC_ SD_ DATA_ FSM
- iNFTnews | 喝茶送虚拟股票?浅析奈雪的茶“发币”
- 1290_ Implementation analysis of prvtaskistasksuspended() interface in FreeRTOS
- Import CV2, prompt importerror: libcblas so. 3: cannot open shared object file: No such file or directory
- I 用c l 栈与队列的相互实现
- Literacy Ethernet MII interface types Daquan MII, RMII, smii, gmii, rgmii, sgmii, XGMII, XAUI, rxaui
- [vscode] search using regular expressions
猜你喜欢
Do you choose pandas or SQL for the top 1 of data analysis in your mind?
DelayQueue延迟队列的使用和场景
目标检测系列——Faster R-CNN原理详解
2022 PMP project management examination agile knowledge points (7)
SOC_ SD_ CMD_ FSM
611. Number of effective triangles
And play the little chestnut of dynamic agent
Matrix and TMB package version issues in R
arcgis_ spatialjoin
I 用c l 栈与队列的相互实现
随机推荐
Mipi interface, DVP interface and CSI interface of camera
M2dgr slam data set of multi-source and multi scene ground robot
ImportError: No module named ‘Tkinter‘
What if the DataGrid cannot see the table after connecting to the database
2022 PMP project management examination agile knowledge points (7)
Netease to B, soft outside, hard in
ModuleNotFoundError: No module named ‘picamera‘
Using GEE plug-in in QGIS
Batch convert txt to excel format
Simple use of timeunit
selenium 元素定位
Course learning accumulation ppt
剑指 Offer 56 数组中数字出现的次数(异或)
Anaconda navigator click open no response, can not start error prompt attributeerror: 'STR' object has no attribute 'get‘
Graduation thesis project local deployment practice
[framework] multi learner
Light up the running light, rough notes for beginners (1)
UNIX commands often used in work
What is sodium hydroxide?
Rough notes of C language (1)