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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)