QT入门

    技术2025-05-01  53

    目录

    说在前面效果图,使用方法和功能代码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;//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 <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_H

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

    这样点击注册就会出现一个完整的界面了

    Processed: 0.010, SQL: 9