当前位置:网站首页>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);
}
边栏推荐
- Basic series of SHEL script (III) for while loop
- Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
- Basic operation of external interrupt (keil5)
- Hdu1231 maximum continuous subsequence (divide and conquer or dynamic gauge or double pointer)
- Ggplot2 drawing learning notes in R
- Altimeter data knowledge point 2
- C#学习笔记
- [untitled]
- Install deeptools in CONDA mode
- 氢氧化钠是什么?
猜你喜欢
Graduation thesis project local deployment practice
第 2 章:小试牛刀,实现一个简单的Bean容器
Detailed explanation of miracast Technology (I): Wi Fi display
[idea] efficient plug-in save actions to improve your work efficiency
SD_ CMD_ RECEIVE_ SHIFT_ REGISTER
【Node】nvm 版本管理工具
What if the DataGrid cannot see the table after connecting to the database
Inftnews | drink tea and send virtual stocks? Analysis of Naixue's tea "coin issuance"
C#学习笔记
[untitled]
随机推荐
Detailed explanation of miracast Technology (I): Wi Fi display
Hdu1232 unimpeded project (and collection)
Reading literature sorting 20220104
[framework] multi learner
2022.06.27_每日一题
HDU1231 最大连续子序列(分治or动规or双指针)
DelayQueue延迟队列的使用和场景
NPM and package common commands
arcpy. SpatialJoin_ Analysis spatial connection analysis
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
Ggplot2 drawing learning notes in R
Application of MATLAB in Linear Algebra (4): similar matrix and quadratic form
Unconventional ending disconnected from the target VM, address: '127.0.0.1:62635', transport: 'socket‘
SOC_ SD_ DATA_ FSM
Basic operation of external interrupt (keil5)
Implementation of one-dimensional convolutional neural network CNN based on FPGA (VIII) implementation of activation layer
Target detection series - detailed explanation of the principle of fast r-cnn
Basic series of SHEL script (II) syntax + operation + judgment
Docker installs MySQL and uses Navicat to connect
I can't stand the common annotations of idea anymore