C++全栈聊天室实战 day2

5.3

登录界面

应用登陆界面
点击运行后只会显示主界面,不会显示我们刚才创建的登录界面,如何将界面显示,显然我们需要在主界面里添加我们的界面类

创建登录界面类

在mainwindow.h中添加LoginDialog指针成员,然后在构造函数将LoginDialog设置为中心部件
代码解释:https://www.cnblogs.com/mszc/p/18858595

点击查看代码
//mainwindow.h
private:
    Ui::MainWindow *ui;
    LoginDiglog * _login_dlg;
    RegisterDialog * _reg_dlg;
};
//mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);//调用 Ui::MainWindow 类的 setupUi 方法,设置 UI 界面

    _login_dlg = new LoginDialog();//创建一个CentralWidget
    setCentralWidget(_login_dlg);//设置其为中心窗口
    _login_dlg->show();//展示
}

切换注册界面

1)在LoginDialog类声明里添加信号切换注册界面

点击查看代码
signals:
    void switchRegister();

ps:在 Qt 中,signals 是一个关键字,用于定义类中可以发出的信号(Signal)。信号是 Qt 信号与槽机制(Signals and Slots)的核心部分,用于实现对象之间的通信。

2)在LoginDialog的构造函数里连接按钮点击事件

点击查看代码
//按钮点击后LoginDialog发出switchRegister信号,该信号发送给MainWindow用来切换界面
connect(ui->reg_btn, &QPushButton::clicked, this, &LoginDialog::switchRegister);

/*
connect 函数
connect 是 Qt 的核心函数之一,用于将信号(Signal)连接到槽(Slot)。它的基本语法是
connect(sender, signal, receiver, slot);
sender:发出信息的对象
signad:发出的信息
receiver:信息接受者
slot:槽函数
*/

3)在MainWindow里声明注册类变量

点击查看代码
private:
    RegisterDialog* _reg_dlg;

4)其构造函数中添加注册类对象的初始化以及连接switchRegister信号
MainWindow 类和一个 LoginDialog 类,LoginDialog 类中有一个 switchRegister 信号,MainWindow 类中有一个 SlotSwitchReg 槽函数

点击查看代码

//创建和注册消息的链接
connect(_login_dlg, &LoginDialog::switchRegister,this, &MainWindow::SlotSwitchReg);
//定义注册类
_reg_dlg = new RegisterDialog();

代码的作用
当 _login_dlg 对象发出 switchRegister 信号时,MainWindow 类的 SlotSwitchReg 槽函数会被调用

5)实现槽函数SlotSwitchReg

点击查看代码
void MainWindow::SlotSwitchReg(){
    setCentralWidget(_reg_dlg);
    _login_dlg->hide();
    _reg_dlg->show();
}

6)优化样式
QSS 是 Qt 的样式表机制,类似于 HTML 的 CSS,用于自定义 Qt 窗口部件(Widgets)的外观。通过 QSS,开发者可以轻松地统一应用程序的视觉风格,而无需逐个设置每个控件的样式
我们在项目根目录下创建style文件夹,在文件夹里创建stylesheet.qss文件,然后在qt项目中的rc.qrc右键添加现有文件,选择stylesheet.qss,qss就被导入到项目中了

点击查看代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//打开文件
    QFile qss(":/style/stylesheet.qss");
    if( qss.open(QFile::ReadOnly))
    {
        qDebug("open success");
        QString style = QLatin1String(qss.readAll());
        a.setStyleSheet(style);
        qss.close();
    }else{
         qDebug("Open failed");
     }
//
    MainWindow w;
    w.show();

    return a.exec();
}

qss内容

点击查看代码
QDialog#LoginDialog{
background-color:rgb(255,255,255)
}

ps:主界面有一道灰色的是toolbar造成的,去mainwindow.ui里把那个toolbar删了就行了

posted @ 2025-05-03 20:28  北燃  阅读(26)  评论(0)    收藏  举报