QT-信号与槽

server/2025/3/5 1:45:57/

1.在注册登录的练习里面,追加一个QListWidget项目列表
要求:点击注册之后,将账号显示到列表窗口小部件上面去
以及,在列表窗口小部件中双击某个账号的时候,将该账号删除

头文件

#ifndef WIDGET_H
#define WIDGET_H
#include <QListWidgetItem>
#include <QWidget>
#include <QFile>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void save_data(const QString& filename,const QString& data);QString load_Data(const QString& filename);//从filename文件中加载数据并以返回值返回
private slots:void on_lineEdit_2_textChanged(const QString &arg1);void on_lineEdit_textChanged(const QString &arg1);void on_pushButton_3_pressed();void on_pushButton_3_released();void on_checkBox_stateChanged(int state);void on_pushButton_2_clicked();void on_listWidget_itemDoubleClicked(QListWidgetItem *item);private:Ui::Widget *ui;QFile file;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//记住账号QString name = load_Data("D:/name.txt");ui->lineEdit_2->setText(name);//判断上次退出前勾选的状态QString ischecked = load_Data("D:/ischeck.txt");if(ischecked=="1")//已经勾选{ui->checkBox->setChecked(1);//进入勾选状态}//记住密码if(ui->checkBox->isChecked())//是勾选状态{QString pswd = load_Data("D:/pswd.txt");ui->lineEdit->setText(pswd);}
}Widget::~Widget()
{QString name =ui->lineEdit_2->text();//记住账号save_data("D:/name.txt",name);QString pswd =ui->lineEdit->text();//记住密码save_data("D:/pswd.txt",pswd);delete ui;
}void Widget::save_data(const QString &filename, const QString& data)
{file.setFileName(filename);//设定文件名file.open(QFile::WriteOnly);//选择打开模式并打开file.write(data.toLocal8Bit());//把Qstring转换为QbyteArrayfile.close();
}QString Widget::load_Data(const QString &filename)
{file.setFileName(filename);file.open(QFile::ReadOnly);QByteArray arr= file.readAll();QString str = QString::fromLocal8Bit(arr);//把QbyteArray转换为Qstringfile.close();return str;
}//账号编辑器发生改变时触发的槽函数
void Widget::on_lineEdit_2_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(name.isEmpty()||pswd.isEmpty())//判断账号和密码是否有空的{ui->pushButton->setEnabled(0);//按钮不可按ui->pushButton_2->setEnabled(0);}else{ui->pushButton->setEnabled(1);//按钮可按ui->pushButton_2->setEnabled(1);}
}
//密码编辑器发生改变时触发的槽函数
void Widget::on_lineEdit_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(name.isEmpty()||pswd.isEmpty()){ui->pushButton->setEnabled(0);ui->pushButton_2->setEnabled(0);}else{ui->pushButton->setEnabled(1);ui->pushButton_2->setEnabled(1);}
}
//显示密码按钮按下
void Widget::on_pushButton_3_pressed()
{ui->lineEdit->setEchoMode(QLineEdit::Normal);//显示密码
}
//显示密码按钮抬起来
void Widget::on_pushButton_3_released()
{ui->lineEdit->setEchoMode(QLineEdit::Password);//隐藏密码
}void Widget::on_checkBox_stateChanged(int state)
{if(state==0)//未勾选{save_data("D:/ischeck.txt","0");}else{//勾选save_data("D:/ischeck.txt","1");}
}void Widget::on_pushButton_2_clicked()
{QString name =ui->lineEdit_2->text();//获取当前账号文本QString base =load_Data("D:/name.txt");//获取文件内账号文本if(name!=base){save_data("D:/name.txt",name);QString str =load_Data("D:/name.txt");ui->listWidget->addItem(str);//添加到Listwidget中}else{}
}void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{ui->listWidget->clear();
}

测试文件

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

2.完成一个计算器,ui界面如下
完成+-*/计算功能并且在对应位置显示对应的数据

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_9_clicked();void on_pushButton_10_clicked();void on_pushButton_11_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_14_clicked();void on_pushButton_16_clicked();void on_pushButton_12_clicked();void on_pushButton_8_clicked();void on_pushButton_4_clicked();void on_pushButton_15_clicked();void on_pushButton_13_clicked();private:Ui::Widget *ui;bool flag;QString symbol;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}//数值按钮
void Widget::on_pushButton_9_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"1");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"1");}
}void Widget::on_pushButton_10_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"2");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"2");}
}void Widget::on_pushButton_11_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"3");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"3");}
}void Widget::on_pushButton_5_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"4");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"4");}
}void Widget::on_pushButton_6_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"5");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"5");}
}void Widget::on_pushButton_7_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"6");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"6");}
}void Widget::on_pushButton_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"7");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"7");}
}void Widget::on_pushButton_2_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"8");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"8");}
}void Widget::on_pushButton_3_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"9");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"9");}
}void Widget::on_pushButton_14_clicked()
{if(flag == 0){QString str = ui->lineEdit->text();ui->lineEdit->setText(str+"0");}else{QString str = ui->lineEdit_2->text();ui->lineEdit_2->setText(str+"0");}
}//符号按钮
//+
void Widget::on_pushButton_16_clicked()
{flag = 1;symbol = "+";ui->label->setText("+");
}//-
void Widget::on_pushButton_12_clicked()
{flag = 1;symbol = "-";ui->label->setText("-");
}//*
void Widget::on_pushButton_8_clicked()
{flag = 1;symbol = "*";ui->label->setText("*");
}//"/"
void Widget::on_pushButton_4_clicked()
{flag = 1;symbol = "/";ui->label->setText("/");
}//=
void Widget::on_pushButton_15_clicked()
{QString str = ui->lineEdit->text();QString ptr = ui->lineEdit_2->text();double x = str.toInt();double y = ptr.toInt();if(symbol == "+"){double num = x + y;QString str = QString::number(num);ui->lineEdit_3->setText(str);}if(symbol == "-"){double num = x - y;QString str = QString::number(num);ui->lineEdit_3->setText(str);}if(symbol == "*"){double num = x * y;QString str = QString::number(num);ui->lineEdit_3->setText(str);}if(symbol == "/"){double num = x / y;QString str = QString::number(num);ui->lineEdit_3->setText(str);}
}//"清除"
void Widget::on_pushButton_13_clicked()
{flag = 0;ui->lineEdit->clear();ui->lineEdit_2->clear();ui->lineEdit_3->clear();ui->label->clear();
}

测试文件

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}


http://www.ppmy.cn/server/172479.html

相关文章

Redis---LRU原理与算法实现

文章目录 LRU概念理解LRU原理基于HashMap和双向链表实现LRURedis中的LRU的实现LRU时钟淘汰策略近似LRU的实现LRU算法的优化 Redis LRU的核心代码逻辑Redis LRU的核心代码逻辑Redis LRU的配置参数Redis LRU的优缺点Redis LRU的优缺点 LRU概念理解 LRU&#xff08;Least Recentl…

构建私有化AI知识库:基于CentOS的Ollama + DeepSeek-R1 +ragflow 整合部署教程

操作系统&#xff1a;CentOS 7.9 CPU&#xff1a;支持 AVX 指令集的 x86_64 处理器 内存&#xff1a;64GB 存储&#xff1a;SSD 1TB 以上 GPU&#xff08;可选&#xff09; 一、组件介绍 Ollama Ollama 是一个专为在本地机器上部署和运行大型语言模型&#xff08;LLM&a…

Spring学习笔记03——Spring Boot的文件结构

Spring boot常见的文件结构&#xff1a; src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── DemoApplication.java # 主入口 │ │ ├── config/ # 配置类 │ │ ├── controller/ …

Switch开关的防抖监听器

一、这代码到底解决了什么问题&#xff1f;&#xff08;先唠点实在的&#xff09; 作为一个在安卓坑里摸爬滚打多年的老码农&#xff0c;肯定都遇到过这种场景&#xff1a;用户疯狂点击Switch开关&#xff0c;结果触发一堆重复回调。这种防抖需求就跟吃饭喝水一样常见。传统实…

腾讯云对象存储服务(COS)

腾讯云对象存储服务&#xff08;COS&#xff09; 安全、可扩展、低成本的云存储解决方案 腾讯云 对象存储服务&#xff08;COS&#xff0c;Cloud Object Storage&#xff09; 是一种高可靠、高性能、可扩展的云存储服务&#xff0c;专为海量非结构化数据&#xff08;如图片、…

思维链 Chain-of-Thought Prompting

论文: Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Wei et al., 2022) 核心贡献: 首次提出通过显式的中间推理步骤&#xff08;即思维链&#xff09;提升大语言模型的复杂推理能力。该方法通过示例展示多步推理过程&#xff0c;引导模型生成逻辑…

【QT网络问题】关于QT在调用天气等类似api接口时报错

报错内容 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed Error: "TLS initialization failed"问题原因 Openssl库不匹配或者未安装&#xff0c;可以通过qdebug版本打印当前所需要的的openssl库&#xff0c;自己去官网下载 qDeb…

【零基础C语言】第四节 数组

【零基础C语言系列】 【零基础C语言】第一节 C语言概述【数制进制码制】-CSDN博客 【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客 【零基础C语言】第三节 控制结构-CSDN博客 一、一维数组