当前位置: 首页 > news >正文

Day01_QT编程20250811

01.作业

1:使用QT的ui界面 + 布局,完成这个图
2:完成计算器功能
3:0~9 允许使用转到槽
+、-、*、\ 手动使用connect连接槽函数

02.代码

calculator.pro

#-------------------------------------------------
#
# Project created by QtCreator 2025-08-11T17:24:23
#
#-------------------------------------------------QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = calculator
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h \FORMS += \widget.uiDISTFILES += \calculator.qss

02.Headers--->widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QFile>
#include <QDebug>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void appendToDisplay(const QString &text);//void calculateResult();//void clearAll();//数字0void on_pushButton_14_clicked();//数字1void on_pushButton_9_clicked();//数字2void on_pushButton_10_clicked();//数字3void on_pushButton_11_clicked();//数字4void on_pushButton_5_clicked();//数字5void on_pushButton_6_clicked();//数字6void on_pushButton_7_clicked();//数字7void on_pushButton_clicked();//数字8void on_pushButton_2_clicked();//数字9void on_pushButton_3_clicked();//算术法+ - * ÷private:Ui::Widget *ui;QString currentOp;  // 当前运算符bool isNewNumber=false;
};#endif // WIDGET_H

03.Sources-->main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);// ========== 关键:加载 QSS 样式 ==========QFile qssFile("D://qt//programs//25051//calculator//calculator.qss"); // QSS 文件名,和 widget.ui、main.cpp 同级目录if(qssFile.open(QFile::ReadOnly | QFile::Text)){// 读取全部内容并设置为全局样式QString qssContent = QLatin1String(qssFile.readAll());a.setStyleSheet(qssContent);qssFile.close();} else {// 如果打开失败,打印错误(调试用)qWarning() << "无法加载 QSS 文件: " << qssFile.errorString();}// ========================================Widget w;w.show();return a.exec();
}

Sources-->widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//========== 2. 运算符按钮:手动 connect 槽函数 ==========// 除法(÷):pushButton_4/*connect(ui->pushButton_4,&QPushButton::clicked,this,[=](){appendToDisplay("/");});*/connect(ui->pushButton_4, &QPushButton::clicked, this, [&]() {currentOp = "/";ui->label->setText("/");isNewNumber = true;});// 乘法(×):pushButton_8/*connect(ui->pushButton_8,&QPushButton::clicked,this,[=](){appendToDisplay("*");});*/connect(ui->pushButton_8, &QPushButton::clicked, this, [&]() {currentOp = "*";ui->label->setText("*");isNewNumber = true;});//减法(-):pushButton_12/*connect(ui->pushButton_12,&QPushButton::clicked, this, [&]() {if(ui->lineEdit->text()==""){ui->lineEdit->setText("-");}else{currentOp = "-";ui->label->setText("-");isNewNumber = true;}});*/// 减法(-):pushButton_12(优化后)connect(ui->pushButton_12,&QPushButton::clicked, this, [&]() {if (isNewNumber == false) {  // 还在输入第一个数if (ui->lineEdit->text().isEmpty()) {// 第一个数为空:输入负号ui->lineEdit->setText("-");} else {// 第一个数已输入:设置减法运算符currentOp = "-";ui->label->setText("-");isNewNumber = true;  // 切换到输入第二个数}} else {  // 正在输入第二个数if (ui->lineEdit_2->text().isEmpty()) {// 第二个数为空:输入负号ui->lineEdit_2->setText("-");}// 若第二个数已输入,不重复设置运算符(避免覆盖)}});//加法(+):pushButton_16/*connect(ui->pushButton_16,&QPushButton::clicked,this,[=](){appendToDisplay("+");});*/connect(ui->pushButton_16, &QPushButton::clicked, this, [&]() {currentOp = "+";ui->label->setText("+");isNewNumber = true;});//清除(C):pushButton_13//方法一:connect(ui->pushButton_13,&QPushButton::clicked,this,&Widget::clearAll);//方法二:connect(ui->pushButton_13, &QPushButton::clicked, this, [&]() {ui->lineEdit->clear();ui->label->clear();ui->lineEdit_2->clear();ui->lineEdit_3->clear();isNewNumber=false;});//等号(=):pushButton_15//connect(ui->pushButton_15,&QPushButton::clicked,this,&Widget::calculateResult);connect(ui->pushButton_15, &QPushButton::clicked, this, [&]() {// 获取输入的操作数,转换为 double 类型double num1 = ui->lineEdit->text().toDouble();double num2 = ui->lineEdit_2->text().toDouble();double result = 0.0;if (currentOp == "+") {result = num1 + num2;} else if (currentOp == "-") {result = num1 - num2;} else if (currentOp == "*") {result = num1 * num2;} else if (currentOp == "/") {if (num2!= 0) {result = num1 / num2;} else {ui->lineEdit_3->setText("Error");return;}}// 将结果显示到界面,比如显示到 lineEditui->lineEdit_3->setText(QString::number(result));});}Widget::~Widget()
{delete ui;
}/*数字0*/
void Widget::on_pushButton_14_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"0"追加到当前文本后面currentText+="0";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"0"追加到当前文本后面currentText+="0";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字1*/
void Widget::on_pushButton_9_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"1"追加到当前文本后面currentText+="1";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"1"追加到当前文本后面currentText+="1";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字2*/
void Widget::on_pushButton_10_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"2"追加到当前文本后面currentText+="2";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"2"追加到当前文本后面currentText+="2";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字3*/
void Widget::on_pushButton_11_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"3"追加到当前文本后面currentText+="3";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"3"追加到当前文本后面currentText+="3";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字4*/
void Widget::on_pushButton_5_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"4"追加到当前文本后面currentText+="4";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"4"追加到当前文本后面currentText+="4";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字5*/
void Widget::on_pushButton_6_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"5"追加到当前文本后面currentText+="5";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"5"追加到当前文本后面currentText+="5";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字6*/
void Widget::on_pushButton_7_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"6"追加到当前文本后面currentText+="6";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"6"追加到当前文本后面currentText+="6";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字7*/
void Widget::on_pushButton_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"7"追加到当前文本后面currentText+="7";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"7"追加到当前文本后面currentText+="7";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字8*/
void Widget::on_pushButton_2_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"8"追加到当前文本后面currentText+="8";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"8"追加到当前文本后面currentText+="8";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}/*数字9*/
void Widget::on_pushButton_3_clicked()
{if(isNewNumber==false){//1.获取当前显示框中的文本QString currentText=ui->lineEdit->text();//2.将"9"追加到当前文本后面currentText+="9";//3.将更新后的文本设置回显示框ui->lineEdit->setText(currentText);}else if(isNewNumber==true){//1.获取当前显示框中的文本QString currentText=ui->lineEdit_2->text();//2.将"9"追加到当前文本后面currentText+="9";//3.将更新后的文本设置回显示框ui->lineEdit_2->setText(currentText);}
}// ========== 辅助函数与其他槽函数 ==========
// 追加文本到显示框(用最上方的 lineEdit 作为输入框)
void Widget::appendToDisplay(const QString &text)
{ui->lineEdit->setText(ui->lineEdit->text() + text);
}// 清除所有内容
/*
void Widget::clearAll()
{ui->lineEdit->clear();    // 清空输入框ui->lineEdit_2->clear();  // 清空中间框(若有使用)ui->lineEdit_3->clear();  // 清空结果框
}
*/

04.Froms-->widget.ui

05.Other files-->calculator.qss

/* 主窗口(或最外层容器)样式 */
QWidget {background-color: #f0f0f0; /* 整体背景色 */
}/* QLineEdit 样式(输入框) */
QLineEdit {border: 2px solid #ccc; border-radius: 6px;      /* 圆角 */padding: 6px 10px;       /* 内边距,让文字不贴着边框 */font-size: 14px;         /* 文字大小 */color: #333;             /* 文字颜色 */background-color: #fff;  /* 输入框背景色 */
}/* QLabel 样式(中间的文本标签,可根据实际需求调整,比如作为提示或分隔) */
QLabel {color: #666;font-size: 13px;padding: 5px 0; /* 上下内边距,让标签垂直居中更美观 */
}/* QPushButton 通用样式 */
QPushButton {border: none;border-radius: 6px; padding: 10px 16px; font-size: 15px;color: #fff;background-color: #009688; /* 基础按钮背景色,可根据喜好换 */min-width: 60px;          /* 保证按钮有一定宽度,适配数字显示 */
}/* 鼠标悬停在按钮上的样式 */
QPushButton:hover {background-color: #00bfa5; 
}/* 按钮按下时的样式 */
QPushButton:pressed {background-color: #00897b; 
}/* 运算符按钮(+、-、*、/ 等)单独样式,可区分开数字按钮 */
QPushButton[text="÷"],
QPushButton[text="×"],
QPushButton[text="-"],
QPushButton[text="+"] {background-color: #ff9800; /* 橙色,突出运算符 */
}QPushButton[text="÷"]:hover,
QPushButton[text="×"]:hover,
QPushButton[text="-"]:hover,
QPushButton[text="+"]:hover {background-color: #ffac2f;
}QPushButton[text="÷"]:pressed,
QPushButton[text="×"]:pressed,
QPushButton[text="-"]:pressed,
QPushButton[text="+"]:pressed {background-color: #e68900;
}/* 等号按钮单独样式 */
QPushButton[text="="] {background-color: #f44336; /* 红色,突出等号 */
}QPushButton[text="="]:hover {background-color: #f65b4e;
}QPushButton[text="="]:pressed {background-color: #d32f2f;
}/* 清除按钮(C)单独样式 */
QPushButton[text="C"] {background-color: #9e9e9e; /* 灰色 */
}QPushButton[text="C"]:hover {background-color: #b0b0b0;
}QPushButton[text="C"]:pressed {background-color: #888;
}

06.成品

http://www.xdnf.cn/news/1283977.html

相关文章:

  • MaixPy开发环境简介
  • vscode新建esp32工程,没有sample_project怎么办?
  • lesson35:数据库深度解析:从概念到MySQL实战学习指南
  • html转成markdown(1.0.0)
  • 朝花夕拾(二)-------python中字符串的3种插值方法/(函数)
  • 【openEuler构建测试环境或部署嵌入式系统】openEuler生态扩容新路径:内网穿透工具cpolar助力多场景落地
  • 【牛客刷题】REAL809 转化
  • Redis RDB和AOF 流程、优缺点详细介绍
  • 【k8s】k8s安装与集群部署脚本
  • C++高频知识点(二十一)
  • wrap cpp variant as dll for c to use
  • day48 力扣739. 每日温度 力扣496.下一个更大元素 I 力扣503.下一个更大元素II
  • 力扣热题100-----322.零钱兑换
  • 使用docker compose 部署dockge
  • scikit-learn/sklearn学习|岭回归解读
  • Mybatis学习之逆向工程(十)
  • Python 类元编程(类工厂函数)
  • Vue 3 快速入门 第六章
  • 【MATLAB 2025a】安装离线帮助文档
  • web前端第三次作业
  • Azimutt:一款免费开源的多功能数据库工具
  • Linux下安装jdk
  • C语言(06)——二、八、十、十六进制的相互转换
  • 机器学习 TF-IDF提取关键词,从原理到实践的文本特征提取利器​
  • 稠密检索:基于神经嵌入的高效语义搜索范式
  • 【CSS 布局】告别繁琐计算:CSS 现代布局技巧(gap, aspect-ratio, minmax)
  • Wed前端第二次作业
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.4 Node.js 的发展与生态(历史版本、LTS 版本、npm 生态系统)
  • 【LeetCode 热题 100】(七)链表
  • 5G NR NTN 在 PHY 层和 MAC 层实现 OAI