zoukankan      html  css  js  c++  java
  • C++面向对象的Qt编程

     实例:加法计算器

    Carculator.h文件  

    #ifndef __CARCULATOR_H_ 
    #define __CARCULATOR_H_
    
    #include <QWidget>
    #include <QLabel>
    #include <QPushButton>
    #include <QLineEdit> 
    #include <QDoubleValidator> //Double数字验证器
    #include <QFont>
    #include <QHBoxLayout>
    
    //自定义窗口类
    class Carculator:public QWidget{
        Q_OBJECT
    public:
        Carculator(void);//构造函数声明
    private:
        QLineEdit* m_x;//左操作数
        QLineEdit* m_y;//右操作数
        QLineEdit* m_z; //显示结果
        QLabel* m_label;//+标签
        QPushButton* m_button;//=按钮
        QHBoxLayout* m_layout;//水平布局器
    
    public slots: //自定义槽函数标记
        void enableButton(void); //恢复按钮正常状态槽函数
        void carculator(void);  //计算和显示结果槽函数
    
    };
    #endif

    Carculator.cpp文件

    #include "Carculator.h"
    
    Carculator::Carculator(void){  //构造函数
        //界面初始化
        setWindowTitle("加法计算器");  //设置标题
        QFont font;  //创建字体对象
        font.setPointSize(20);  //设置字体大小
        setFont(font);  //给父窗口设置字体
    
        m_x=new QLineEdit(this);
        m_x->setAlignment(Qt::AlignRight);//设置文本对齐方式
        m_x->setValidator(new QDoubleValidator(this));//设置验证器-只能输入double文本
    
    
        m_y=new QLineEdit(this);
        m_y->setAlignment(Qt::AlignRight);
        m_y->setValidator(new QDoubleValidator(this));
    
        m_z=new QLineEdit(this);
        m_z->setAlignment(Qt::AlignRight);
        m_z->setReadOnly(true);//设为用户只读
    
        m_label=new QLabel("+",this);
        m_button=new QPushButton("=",this);
        m_button->setEnabled(false);//设置是否可用
        //false  不可用
    
        m_layout=new QHBoxLayout(this);
        m_layout->addWidget(m_x);  //往布局控件中添加控件-按顺序
        m_layout->addWidget(m_label);
        m_layout->addWidget(m_y); 
        m_layout->addWidget(m_button); 
        m_layout->addWidget(m_z);
        setLayout(m_layout); //窗口添加布局控件
        
        //信号和槽的链接
        connect(m_x,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
        //槽函数是当前父窗口自定义的,所以接受者是this
        connect(m_y,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
        connect(m_button,SIGNAL(clicked(void)),this,SLOT(carculator(void)));
    
    }
    void Carculator::enableButton(void){  //恢复按钮正常状态槽函数
        bool bxok;//记录左操作数是否有效数据
        bool byok;//记录右操作数是否有效数据
        m_x->text().toDouble(&bxok);
        //m_x->text  返回文本
        //toDouble  把QString文本转换成double
        m_y->text().toDouble(&byok);
        m_button->setEnabled(bxok && byok);
    
    }
    void Carculator::carculator(void){    //计算和显示结果槽函数
        double res=m_x->text().toDouble()  + m_y->text().toDouble();
        QString str=QString::number(res);
        m_z->setText(str);  //设置显示文本
    
    }

    main.cpp文件

    #include <QApplication>
    #include "Carculator.h"
    
    int main(int argc,char *argv[])
    {
        QApplication app(argc,argv);  
    
        Carculator win;
        win.show();
    
        return app.exec();  
    }

  • 相关阅读:
    Boost之使用篇(1)
    Lucene 3.0.0细节初窥(1)深入探索Lucene的consumer与processor
    整理一点关于Lucene的学习资料, 方便自己与别人查看
    使用Lucene 3.0.0的结构遍历TokenStream的内容.
    [原创]如何写一个完善的c++异常处理类
    Lucene 3.0.0 的TokenStream与Analyzer
    Lucene 3.0.0 之样例解析(4)IndexFiles.java
    贝叶斯、概率分布与机器学习
    Lucene用c++重写的详细安排
    Lucene 3.0.0的细节初窥(2)研究在索引过程中的缓存
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13655478.html
Copyright © 2011-2022 走看看