QT登录客户端的功能简单实现

头文件

#ifndef LOGINUI_H
#define LOGINUI_H

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include <QMessageBox>

#include "client.h"

class LoginUI : public QWidget
{
    Q_OBJECT

private:
    //标签类组件
    QLabel* Background_Lab;
    QLabel* Titile_Lab;
    QLabel* Username_Lab;
    QLabel* Password_Lab;

    //按钮类组件
    QPushButton* Close_Btn;
    QPushButton* Hide_Btn;
    QPushButton* Login_Btn;

    //行编辑器类组件
    QLineEdit* Username_Edit;
    QLineEdit* Password_Edit;

    //构造函数
    LoginUI();
    bool construct();

private slots:
    //槽函数
    void On_CloseBtn_Clicked();
    void On_Loginbtn_Slots();


public:
    //实例化对象
    static LoginUI* NewInstance();
    void show();
    ~LoginUI();

signals:
    //跳转函数
    void Jump();

};
#endif //LOGINUI_H

函数实现

#include "LoginUI.h"
#include <QDebug>

LoginUI::LoginUI(): QWidget(nullptr, Qt::WindowCloseButtonHint)
{
}



void LoginUI::show()
{
    setWindowFlag(Qt::FramelessWindowHint);

    setFixedSize(538, 373);

    QWidget::show();
}


LoginUI::~LoginUI()
{
}

//构造函数
bool LoginUI::construct()
{
    bool ret = true;

    Background_Lab = new QLabel(this);

    if( Background_Lab != nullptr)
    {
        Background_Lab->resize(538, 160);
        Background_Lab->setStyleSheet("background-color:rgb(115,70,240)");
    }
    else
    {
        ret = false;
    }

    Titile_Lab = new QLabel(this);

    if( Titile_Lab != nullptr )
    {
        Titile_Lab->resize(90, 50);
        Titile_Lab->setPixmap(QPixmap(":/QT_Icon/QQ_Icon.png"));
        Titile_Lab->setScaledContents(true);
    }
    else
    {
        ret = false;
    }

    Close_Btn = new QPushButton(this);

    if( Close_Btn != nullptr )
    {
        Close_Btn->resize(20, 20);
        Close_Btn->setIcon(QIcon(":/QT_Icon/close02.png"));
        Close_Btn->move(508, 10);
        connect(this->Close_Btn, &QPushButton::clicked, this, &LoginUI::On_CloseBtn_Clicked);
    }
    else
    {
        ret = false;
    }

    Hide_Btn = new QPushButton(this);

    if( Hide_Btn != nullptr )
    {
        Hide_Btn->resize(20, 20);
        Hide_Btn->setIcon(QIcon(":/QT_Icon/hide02.png"));
        Hide_Btn->move(468, 10);
        connect(this->Hide_Btn, &QPushButton::clicked, this, &LoginUI::hide);
    }
    else
    {
        ret = false;
    }

    Username_Edit = new QLineEdit(this);

    if( Username_Edit != nullptr )
    {
        Username_Edit->resize(260, 40);
        Username_Edit->move(159, 173);
        Username_Edit->setMaxLength(16);
        Username_Edit->setPlaceholderText("QQ账号/手机号/邮箱");
    }
    else
    {
        ret = false;
    }

    Password_Edit = new QLineEdit(this);

    if( Password_Edit != nullptr )
    {
        Password_Edit->resize(260, 40);
        Password_Edit->move(Username_Edit->x(), Username_Edit->y()+60);
        Password_Edit->setEchoMode(QLineEdit::Password);
        Password_Edit->setMaxLength(16);
    }
    else
    {
        ret = false;
    }

    Username_Lab = new QLabel(this);

    if( Username_Lab != nullptr )
    {
        Username_Lab->resize(30, 30);
        Username_Lab->move(Username_Edit->x()-40, Username_Edit->y()+5);
        Username_Lab->setPixmap(QPixmap(":/QT_Icon/windos_icon1.png"));
        Username_Lab->setScaledContents(true);
    }
    else
    {
        ret = false;
    }

    Password_Lab = new QLabel(this);

    if( Password_Lab != nullptr )
    {
        Password_Lab->resize(30, 30);
        Password_Lab->move(Password_Edit->x()-40, Password_Edit->y()+5);
        Password_Lab->setPixmap(QPixmap(":/QT_Icon/password.png"));
        Password_Lab->setScaledContents(true);
    }
    else
    {
        ret = false;
    }

    Login_Btn = new QPushButton("登录",this);

    if( Login_Btn != nullptr )
    {
        Login_Btn->resize(300, 40);
        Login_Btn->setStyleSheet("background-color:rgb(8,189,253);");
        Login_Btn->move(Password_Lab->x(), Password_Lab->y()+60);
        connect(this->Login_Btn, &QPushButton::clicked, this, &LoginUI::On_Loginbtn_Slots);
    }
    else
    {
        ret = false;
    }



    return ret;

}

void LoginUI::On_CloseBtn_Clicked()
{
    QMessageBox box(QMessageBox::Question, "关闭", "您确定要退出?", QMessageBox::Yes | QMessageBox::No, this);
    box.setDefaultButton(QMessageBox::No);

    int ret = box.exec();

    if(ret == QMessageBox::Yes)
    {
        this->close();
    }
    else if(ret == QMessageBox::No)
    {

    }
}

void LoginUI::On_Loginbtn_Slots()
{
    if(Username_Edit->text() == "admin" && Password_Edit->text() == "123456")
    {
        emit Jump();

        this->close();
    }
    else
    {
        int ret = QMessageBox::warning(this, "失败", "账号或密码错误", QMessageBox::Ok, QMessageBox::Ok);
        if(ret == QMessageBox::Ok)
        {

        }
    }
}

LoginUI *LoginUI::NewInstance()
{
    LoginUI* ret = new LoginUI;

    if( ret == nullptr && !ret->construct() )
    {
        delete ret;

        ret = nullptr;
    }


    qDebug() << ret->construct();

    return ret;
}

跳转窗口头文件

#ifndef CLIENT_H
#define CLIENT_H

#include <QWidget>

namespace Ui {
class Client;
}

class Client : public QWidget
{
    Q_OBJECT

public:
    explicit Client(QWidget *parent = nullptr);
    ~Client();

public slots:
    void jump_solt();

private:
    Ui::Client *ui;
};

#endif // CLIENT_H

跳转窗口函数实现

#include "client.h"
#include "ui_client.h"


Client::Client(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Client)
{
    ui->setupUi(this);
}

Client::~Client()
{
    delete ui;
}

void Client::jump_solt()
{
    this->show();
}

main函数

#include "LoginUI.h"
#include "client.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    LoginUI* cal = LoginUI::NewInstance();
    int ret = -1;
    Client* c1 = new Client;
    LoginUI::connect(cal, &LoginUI::Jump, c1, &Client::jump_solt);

    if( cal != NULL )
    {       
        cal->show();

        ret = a.exec();

        delete cal;
    }

    return ret;
}

### 回答1: 在使用Qt搭建服务器和客户端实现直播功能时,主要需要以下几个步骤: 1. 服务器端的搭建:首先,需要通过Qt创建一个服务器应用程序,为客户端提供直播数据流的传输。使用Qt的网络库类,如QTcpServer和QTcpSocket,可以实现对服务器的监听和接受客户端连接请求的功能。服务器端还需使用Qt的多线程类,如QThread,来处理多个客户端连接和直播数据的发送。 2. 客户端的搭建:通过Qt创建一个客户端应用程序,用于接收服务器端传来的直播数据流并进行播放。使用Qt的网络库类,如QTcpSocket,客户端能够连接服务器,并接受直播数据流。客户端还可以使用Qt的多媒体类,如QMediaPlayer,来播放从服务器传来的直播数据。 3. 直播数据的传输:一般使用TCP协议来传输直播数据。服务器端将直播数据通过TCP socket发送给已连接的客户端,而客户端则通过TCP socket接收和解析这些数据,并使用多媒体类来播放直播内容。 4. 直播功能实现:根据需求,还可以在程序中加入一些附加功能,例如客户端的聊天室、礼物赠送、直播间管理等功能。这些功能可以通过Qt的信号与槽机制、套接字通信及数据库的操作等方式来实现。 总体而言,通过使用Qt的网络库类和多媒体类,可以较为方便地搭建服务器和客户端实现直播功能。在搭建过程中,需要注意处理多个连接和数据流传输的并发性,同时也需要考虑网络稳定性和性能优化等因素。 ### 回答2: 搭建服务器客户端实现直播,我们可以使用Qt网络模块来实现。 首先,在服务器端,我们需要创建一个TCP服务器。我们可以使用`QTcpServer`类来创建一个服务器,然后使用`listen`函数指定服务器的地址和端口号。当有客户端连接到服务器时,服务器会自动调用`newConnection`信号槽。 在`newConnection`槽函数中,我们可以创建一个`QTcpSocket`对象来处理与客户端的通信。我们可以使用`write`函数向客户端发送直播数据,例如视频流。同时,我们还可以使用`readyRead`信号槽来接收客户端发送的消息或命令。 在客户端,我们需要创建一个TCP客户端来连接到服务器。我们可以使用`QTcpSocket`类来创建一个客户端,然后使用`connectToHost`函数指定服务器的地址和端口号。当成功连接到服务器后,我们可以使用`connected`信号槽来进行后续操作。 在客户端中,我们可以使用`readyRead`信号槽来接收服务器发送的直播数据。我们还可以使用`write`函数向服务器发送消息或命令。 当我们的服务器和客户端完成基本的连接和通信设置后,我们可以在服务器端使用多线程来处理多个客户端的连接和直播数据的传输。这样,我们就可以实现多个客户端同时观看直播。 总结起来,通过使用Qt的网络模块,我们可以搭建一个简单的服务器客户端系统来实现直播功能。服务器端负责接收客户端连接,并发送直播数据,而客户端则负责连接服务器并接收直播数据。这样我们就可以实现通过搭建服务器客户端实现直播的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值