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(); }