目录
1.新建1个qt项目,基类选中QWidget
2.ui文件布局
3.头文件
3.1 explicit的作用
具体解释
示例
4.cpp源文件
5.信号与槽的应用
6.qt实现效果
7.qt样式表的应用
1.新建1个qt项目,基类选中QWidget
2.ui文件布局
3.头文件
#ifndef WIDADMINLOGIN_H
#define WIDADMINLOGIN_H#include <QWidget>
#include <QMouseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class WidAdminLogin; }
QT_END_NAMESPACEclass WidAdminLogin : public QWidget
{Q_OBJECTpublic:explicit WidAdminLogin(QWidget *parent = nullptr); //explicit 当构造函数被标记为 explicit 时,编译器会禁止使用该构造函数进行隐式类型转换。这意味着你不能用一个参数来初始化一个对象,除非你明确使用构造函数。~WidAdminLogin();// 设置用户名和密码void OnSetUserAndPwd(QString strUser, QString strPwd);signals: //发送的信号// 进入功能选择页面//void signalInterAdminFunction();private slots: //只有该类使用的槽函数void on_btnLogin_clicked();private:Ui::WidAdminLogin *ui;
};
#endif // WIDADMINLOGIN_H
3.1explicit的作用
在 C++ 中,explicit
关键字用于构造函数,以防止隐式类型转换。它的主要作用是确保构造函数只能被显式调用,而不能通过其他类型的对象进行隐式转换。这在某些情况下可以防止错误或意外的行为。
具体解释
-
防止隐式转换: 当你定义一个构造函数为
explicit
时,如果想要使用该构造函数进行对象初始化,必须显式调用它。例如,如果你有一个类A
,并定义了一个接受int
类型参数的构造函数,如果这个构造函数不是explicit
,你可以这样写:A a = 5; // 这里会隐式调用 A(int)
然而,如果构造函数是
explicit
,使用上述代码将导致编译错误。你必须显式调用构造函数:A a(5); // 正确,显式调用构造函数
-
防止潜在的错误: 有时候,隐式转换可能会导致不易察觉的错误。例如,你可能在代码中不经意间传递了一个错误的类型,结果编译器会默默地进行转换,这可能导致逻辑上的错误。使用
explicit
可以强制程序员显式地表明他们的意图。 -
适用场景:
- 当你有一个构造函数接受一个参数,并且你不希望它被用于隐式转换时,使用
explicit
是一个好习惯。 - 当你的类设计中不希望用户通过简单的类型赋值来创建对象时,使用
explicit
可以增强代码的可读性和安全性。
- 当你有一个构造函数接受一个参数,并且你不希望它被用于隐式转换时,使用
示例
以下是一个使用 explicit
的简单示例:
class MyClass {
public:explicit MyClass(int value) {// 构造函数实现}
};void func(MyClass obj) {// 函数实现
}int main() {MyClass a(5); // 正确MyClass b = 5; // 错误:编译失败,因为构造函数是 explicitfunc(5); // 错误:编译失败,因为隐式转换被禁止
}
总之,使用 explicit
可以帮助你控制对象的创建方式,增强代码的可读性和安全性。
4.cpp源文件
#include "widadminlogin.h"
#include "ui_widadminlogin.h"WidAdminLogin::WidAdminLogin(QWidget *parent): QWidget(parent), ui(new Ui::WidAdminLogin)
{ui->setupUi(this);//ui->txtUser->setStyleSheet("QLineEdit {\nbackground-color: rgb(255, 255, 255);\nborder: 1px solid rgb(211, 211, 211);\n color: rgb(0, 0, 0);\n padding: 4px 4px;\n text-align: center;\n text-decoration: none;\n \n font-size: 14px;\n font: 700 14pt;\nborder-radius:8px;\n}");//ui->txtPwd->setStyleSheet("QLineEdit {\nbackground-color: rgb(255, 255, 255);\nborder: 1px solid rgb(42, 140, 255);\n color: rgb(0, 0, 0);\n padding: 4px 4px;\n text-align: center;\n text-decoration: none;\n \n font-size: 14px;\n font: 700 14pt;\nborder-radius:8px;\n}");connect(ui->btnLogin, &QPushButton::clicked, this, &WidAdminLogin::on_btnLogin_clicked);ui->labelUserPwdError->hide();ui->labelUserPwdSucess->hide();// 打开控件的事件过滤器//ui->txtUser->installEventFilter(this);//ui->txtPwd->installEventFilter(this);
}WidAdminLogin::~WidAdminLogin()
{delete ui;
}// 设置用户名和密码
void WidAdminLogin::OnSetUserAndPwd(QString strUser, QString strPwd)
{ui->txtUser->setText(strUser);ui->txtPwd->setText(strPwd);
}void WidAdminLogin::on_btnLogin_clicked()
{// 校验用户名和密码QString strPwd = ui->txtPwd->text();QString strUser = ui->txtUser->text();//当用户名为 "77" 且密码为 "123" 时才能登录成功if (strPwd != "123" || strUser != "77"){// 密码错误ui->labelUserPwdError->show();return;}else{ui->labelUserPwdSucess->setText("登录成功!");ui->labelUserPwdSucess->show();return;}// 进入功能选择页面//emit signalInterAdminFunction();
}
5.信号与槽的应用
connect(ui->btnLogin, &QPushButton::clicked, this,&WidAdminLogin::on_btnLogin_clicked);
该代码在点击按钮时实现按钮相应槽函数的响应
6.qt实现效果
当用户密码设置正确时,界面显示sucess,失败时界面显示账号密码错误
7.qt样式表的应用
账号密码错误的样式是怎么设置的?
答:右键设置样式表
QLabel {
border: 1 px; /* 设置 1 像素的黑色边框 */
color: rgb(255, 22, 22); /* 设置文本颜色为明亮的红色 */
padding: 4px 4px; /* 设置内边距为 4 像素 */
text-align: center;
text-decoration: none;
font-size: 9px;
font: 700 9pt; /* 设置字体为粗体
border-radius:8px; /* 设置边框圆角为 8 像素 */
}