当前位置:网站首页>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);
}
边栏推荐
- The SQL implementation has multiple records with the same ID, and the latest one is taken
- Inftnews | drink tea and send virtual stocks? Analysis of Naixue's tea "coin issuance"
- [untitled]
- Unforgettable summary of 2021
- How to delete the virus of inserting USB flash disk copy of shortcut to
- SOC_ SD_ CMD_ FSM
- [node] differences among NPM, yarn and pnpm
- CADD课程学习(6)-- 获得已有的虚拟化合物库(Drugbank、ZINC)
- ORACLE CREATE SEQUENCE,ALTER SEQUENCE,DROP SEQUENCE
- Do you choose pandas or SQL for the top 1 of data analysis in your mind?
猜你喜欢

HDU1232 畅通工程(并查集)

HDU1231 最大连续子序列(分治or动规or双指针)

Clickhouse database installation deployment and remote IP access

An article was opened to test the real situation of outsourcing companies

Altimeter data knowledge point 2

【无标题】

Today, share the wonderful and beautiful theme of idea + website address

2022年PMP项目管理考试敏捷知识点(7)

Mipi interface, DVP interface and CSI interface of camera

Delayqueue usage and scenarios of delay queue
随机推荐
611. 有效三角形的个数
Ethtool principle introduction and troubleshooting ideas for network card packet loss (with ethtool source code download)
What is sodium hydroxide?
[OBS] x264 Code: "buffer_size“
And let's play dynamic proxy (extreme depth version)
Simple operation of nixie tube (keil5)
Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
Idea to view the source code of jar package and some shortcut keys (necessary for reading the source code)
Unity UGUI不同的UI面板或者UI之间如何进行坐标匹配和变换
What if the DataGrid cannot see the table after connecting to the database
Three body goal management notes
How to deal with excessive memory occupation of idea and Google browser
纯碱是做什么的?
[software testing] 05 -- principles of software testing
Altimeter data knowledge point 2
The golang timer uses the stepped pit: the timer is executed once a day
Install deeptools in CONDA mode
I 用c l 栈与队列的相互实现
Brief description of inux camera (Mipi interface)
C learning notes