当前位置:网站首页>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

  1. x and y When there are no numbers , The equal sign button is gray ( Forbidden )

 Insert picture description here

  1. x and y When there are numbers , The equal sign button is on ( Available )

 Insert picture description here

  1. Press down “=” The result is calculated after the button , The result is displayed in the third blank
     Insert picture description here

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);
}
原网站

版权声明
本文为[Cukor Chuk]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140556084600.html