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

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