目录
说在前面效果图,使用方法和功能代码main.cpp设计界面mainwindow.hmainwindow.cppregisterwindow.hregisterwindow.cpp
遇到的问题汇总MainWindow设置setLayout布局时没用?
说在前面
QQ登录界面如下,只有登录和注册功能,点击注册后会弹出注册窗口,注册窗口内点击注册会关闭,主窗口输入用户名和密码后点击登录后会和注册信息进行比较,匹配与否会有提示信息 (此代码没有数据库,如果需要可以参考地址簿) 文件: mainwindow窗口是用ui设计的,registerwindow是纯代码设计的,这次实验算一个综合运用吧
效果图,使用方法和功能
初始界面 点击注册,弹出窗口: 用户名密码输入 点击注册后Register窗口消失 正确输入后: 错误输入:
代码
main.cpp
#include <QApplication>
#include <mainwindow.h>
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 <QMainWindow>
#include <QString>
#include <registerwindow.h>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget
*parent
= 0);
~MainWindow();
private:
Ui
::MainWindow
*ui
;
QString rs1
;
QString rs2
;
QString ls1
;
QString ls2
;
registerwindow
*registerUI
;
private slots
:
void on_loginBtn_clicked();
void on_registerBtn_clicked();
void setBackgroundIamge(QString path
);
};
#endif
mainwindow.cpp
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include <QMainWindow>
#include <registerwindow.h>
#include <QMessageBox>
#include <QDebug>
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 <QMainWindow>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QString>
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.cpp
#include <QtGui>
#include <registerwindow.h>
#include <QMainWindow>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QWidget>
#include <QString>
#include <QDebug>
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),还是弄出一堆窗口 这是为什么呢? 我调试了很久,最后在上的这篇文章上找到了答案: QT——mainwindow使用布局没反应的解决 由于之前用纯代码布局都是用的QWidget类,所以现在才反应出这个问题 QMainWindow类是自带一个主窗口centralWidget的,所以必须要有: this->centralWidget()->setLayout(layout); 这里我们这么写:
widget
->setLayout(mainlayout
);
this->setWindowTitle("Register");
this->setCentralWidget(widget
);
this->setLayout(mainlayout
);
这样点击注册就会出现一个完整的界面了