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删了就行了

浙公网安备 33010602011771号