QT入门_如何制作一个简单的QQ登录页面

目录

  • 说在前面
  • 效果图,使用方法和功能
  • 代码
    • main.cpp
    • 设计界面
    • mainwindow.h
    • mainwindow.cpp
    • registerwindow.h
    • registerwindow.cpp
  • 遇到的问题汇总
    • MainWindow设置setLayout布局时没用?

说在前面

QQ登录界面如下,只有登录和注册功能,点击注册后会弹出注册窗口,注册窗口内点击注册会关闭,主窗口输入用户名和密码后点击登录后会和注册信息进行比较,匹配与否会有提示信息
(此代码没有数据库,如果需要可以参考地址簿)
文件:
在这里插入图片描述
mainwindow窗口是用ui设计的,registerwindow是纯代码设计的,这次实验算一个综合运用吧

效果图,使用方法和功能

初始界面
在这里插入图片描述
点击注册,弹出窗口:
在这里插入图片描述
用户名密码输入
在这里插入图片描述
点击注册后Register窗口消失
正确输入后:
在这里插入图片描述
错误输入:
在这里插入图片描述

代码

main.cpp

#include 
#include 
int main(int argc,char* argv[]){QApplication a(argc,argv);MainWindow w;w.show();return a.exec();
}

设计界面

在这里插入图片描述
在这里插入图片描述
不贴ui_mainwindow.h的代码了

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include 
#include 
#include namespace  Ui {class MainWindow;
}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:Ui::MainWindow *ui;QString rs1;//registerS1QString rs2;QString ls1;//loginS1QString ls2;registerwindow *registerUI;private slots:void on_loginBtn_clicked();void on_registerBtn_clicked();void setBackgroundIamge(QString path);
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "ui_mainwindow.h"
#include "mainwindow.h"
#include 
#include 
#include 
#include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);registerUI = new registerwindow();this->ui->userline->setEchoMode(QLineEdit::Normal);this->ui->pswline->setEchoMode(QLineEdit::Password);setWindowTitle("QQ");setBackgroundIamge(":/new/prefix1/image/3.png");}void MainWindow::setBackgroundIamge(QString path){QPixmap pixmap = QPixmap(path).scaled(this->size());QPalette palette(this->palette());palette.setBrush(QPalette::Background, QBrush(pixmap));this->setPalette(palette);
}MainWindow::~MainWindow(){delete ui;
}void MainWindow::on_loginBtn_clicked(){ls1 = this->ui->userline->text();ls2 = this->ui->pswline->text();rs1 = registerUI->s1;rs2 = registerUI->s2;if(ls1==rs1&&ls2==rs2){QMessageBox::information(this,tr("恭喜你"),tr("登录成功"));return;}else{QMessageBox::information(this,tr("恭喜你"),tr("登录失败"));return;}
}void MainWindow::on_registerBtn_clicked(){registerUI->show();
}

registerwindow.h

#ifndef REGISTERWINDOW_H
#define REGISTERWINDOW_H#include 
#include 
#include 
#include 
#include class registerwindow: public QMainWindow{Q_OBJECTpublic:explicit registerwindow(QWidget *parent = 0);~registerwindow();QString s1;QString s2;private:QPushButton* registerBtn;QLabel* userlabel;QLabel* pswlabel;QLineEdit* userline;QLineEdit* pswline;private slots:void on_registerBtn_clicked();};#endif // REGISTERWINDOW_H

registerwindow.cpp

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include registerwindow::registerwindow(QWidget *parent):QMainWindow(parent)
{QWidget* widget = new QWidget;registerBtn = new QPushButton("注册");userlabel = new QLabel("user:");pswlabel  = new QLabel("psw:");userline = new QLineEdit();pswline = new QLineEdit();registerBtn->show();userlabel->show();pswlabel->show();userline->show();pswline->show();QHBoxLayout* linelayout1 = new QHBoxLayout();linelayout1 ->addWidget(userlabel);linelayout1 ->addWidget(userline);QHBoxLayout* linelayout2 = new QHBoxLayout();linelayout2 ->addWidget(pswlabel);linelayout2 ->addWidget(pswline);QVBoxLayout* mainlayout = new QVBoxLayout();mainlayout ->addLayout(linelayout1);mainlayout ->addLayout(linelayout2);mainlayout ->addWidget(registerBtn);connect(registerBtn,SIGNAL(clicked(bool)),this,SLOT(on_registerBtn_clicked()));widget->setLayout(mainlayout);/*这个坑必须记住*/this->setWindowTitle("Register");this->setCentralWidget(widget);}registerwindow::~registerwindow(){}void registerwindow::on_registerBtn_clicked(){s1 = userline->text();s2 = pswline->text();this->hide();
}

遇到的问题汇总

问题整理自QT学习日志(笔记/问题)

MainWindow设置setLayout布局时没用?

在这里插入图片描述
如图,明明设置了this->setWindowTitle(mainLayout),还是弄出一堆窗口
这是为什么呢?
我调试了很久,最后在CSDN上的这篇文章上找到了答案:
QT——mainwindow使用布局没反应的解决
由于之前用纯代码布局都是用的QWidget类,所以现在才反应出这个问题
QMainWindow类是自带一个主窗口centralWidget的,所以必须要有:

this->centralWidget()->setLayout(layout);
这里我们这么写:

    widget->setLayout(mainlayout);this->setWindowTitle("Register");this->setCentralWidget(widget);this->setLayout(mainlayout);

在这里插入图片描述
这样点击注册就会出现一个完整的界面了


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部