QT-信号与槽
- 互联网
- 2025-09-14 05:48:01

1.在注册登录的练习里面,追加一个QListWidget项目列表 要求:点击注册之后,将账号显示到列表窗口小部件上面去 以及,在列表窗口小部件中双击某个账号的时候,将该账号删除
头文件
#ifndef WIDGET_H #define WIDGET_H #include <QListWidgetItem> #include <QWidget> #include <QFile> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: 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转换为QbyteArray file.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转换为Qstring file.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_NAMESPACE class Widget : public QWidget { Q_OBJECT public: 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(); }