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

目录

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

说在前面

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

效果图,使用方法和功能

初始界面
QT入门_如何制作一个简单的QQ登录页面_第2张图片
点击注册,弹出窗口:
QT入门_如何制作一个简单的QQ登录页面_第3张图片
用户名密码输入
QT入门_如何制作一个简单的QQ登录页面_第4张图片
点击注册后Register窗口消失
正确输入后:
QT入门_如何制作一个简单的QQ登录页面_第5张图片
错误输入:
QT入门_如何制作一个简单的QQ登录页面_第6张图片

代码

main.cpp

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

设计界面

QT入门_如何制作一个简单的QQ登录页面_第7张图片
QT入门_如何制作一个简单的QQ登录页面_第8张图片
不贴ui_mainwindow.h的代码了

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

namespace  Ui {
     
    class MainWindow;
}

class MainWindow : public QMainWindow{
     
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QString rs1;//registerS1
    QString rs2;
    QString ls1;//loginS1
    QString 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_OBJECT

public:
    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);

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

你可能感兴趣的:(Qt,qt,c++)