Qt启动新窗口

Qt启动新窗口

1、前言

|--------------------------------------|
| 前言:记录自己对于QT启动新窗口的学习,可以给别人参考也方便自己日后回顾 |

2、新建ui文件

|-----------------|
| 右键Froms,添加新文件 |

3、创建ui界面

4、隐藏当前界面

cpp 复制代码
this->hide();       //把当前界面隐藏掉

5、包含头文件,启动新界面

5.1在新的头文件里声明一个网络对象,更改构造函数

cpp 复制代码
public:
// 构造函数:初始化一个新的 clientChat 实例,并将其与给定的 QTcpSocket 关联
    explicit clientChat(QTcpSocket *s, QWidget *parent = nullptr);
    ~clientChat();
cpp 复制代码
private:
    Ui::clientChat *ui;

    QTcpSocket *socket;        //声明一个网络通信对象

5.2更改构造函数并赋值

cpp 复制代码
clientChat::clientChat(QTcpSocket *s, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::clientChat)
{
    ui->setupUi(this);
    socket = s;         //s赋值给socket
}

5.3启动新窗口

cpp 复制代码
clientChat *c = new clientChat(clientSocket);   //创建窗口,把clientSocket传过去
c->show();          //显示窗口

6、清空输入框

cpp 复制代码
void clientChat::on_clearPushButton_clicked()
{
    ui->clientSendTextEdit->clear();        //清空数据发送区
}

7、发送数据

cpp 复制代码
//发送数据
void clientChat::on_sendPushButton_clicked()
{
    QString message = ui->clientSendTextEdit->toPlainText().trimmed();     //获取用户输入信息
    QByteArray data = message.toUtf8();         //将QString类型转换为QByteArray
    socket->write(data);                    //发送数据
}

8、.h文件和.cpp文件

8.1 widget.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpSocket>
#include <QMessageBox>
#include <QHostAddress>
#include <QDebug>
#include <clientchat.h>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_canclePushButton_clicked();        //取消按钮

    void on_connectPushButton_clicked();       //连接按钮

private:
    Ui::Widget *ui;

    QTcpSocket *clientSocket;       //定义网络对象
};
#endif // WIDGET_H

8.2 widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

    clientSocket = new QTcpSocket(this);        //创建一个网络对象

    //连接成功的处理
    connect(clientSocket,&QTcpSocket::connected,this, [=](){

        QMessageBox::information(this,"连接提示","连接服务器成功");

        this->hide();       //把当前界面隐藏掉

        clientChat *c = new clientChat(clientSocket);   //创建窗口,把clientSocket传过去
        c->show();          //显示窗口
    });

    //连接失败的处理
    connect(clientSocket,&QTcpSocket::disconnected,this, [=](){

        QMessageBox::information(this,"连接提示","连接服务器失败");
    });
}

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

//关闭窗口
void Widget::on_canclePushButton_clicked()
{
    this->close();          //关闭窗口
}

//连接
void Widget::on_connectPushButton_clicked()
{
    QString ip = ui->ipLineEdit->text();         //获取IP地址输入框文本
    QString port = ui->portLineEdit->text();     //获取端口输入框文本

    qDebug() << ip;
    qDebug() << port;

    clientSocket->connectToHost(QHostAddress(ip), port.toShort());  //连接到指定的主机和端口
}

8.3 clientchat.h

cpp 复制代码
#ifndef CLIENTCHAT_H
#define CLIENTCHAT_H

#include <QWidget>
#include <QTcpSocket>

namespace Ui {
class clientChat;
}

class clientChat : public QWidget
{
    Q_OBJECT

public:
    // 构造函数:初始化一个新的 clientChat 实例,并将其与给定的 QTcpSocket 关联
    explicit clientChat(QTcpSocket *s, QWidget *parent = nullptr);
    ~clientChat();

private slots:
    void on_clearPushButton_clicked();          //清除按钮

    void on_sendPushButton_clicked();           //发送按钮

private:
    Ui::clientChat *ui;

    QTcpSocket *socket;        //声明一个网络通信对象
};

#endif // CLIENTCHAT_H

8.4 clientchat.cpp

cpp 复制代码
#include "clientchat.h"
#include "ui_clientchat.h"

clientChat::clientChat(QTcpSocket *s, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::clientChat)
{
    ui->setupUi(this);
    socket = s;         //s赋值给socket
}

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

//清空
void clientChat::on_clearPushButton_clicked()
{
    ui->clientSendTextEdit->clear();        //清空数据发送区
}

//发送数据
void clientChat::on_sendPushButton_clicked()
{
    QString message = ui->clientSendTextEdit->toPlainText().trimmed();     //获取用户输入信息
    QByteArray data = message.toUtf8();         //将QString类型转换为QByteArray
    socket->write(data);                    //发送数据
}

9、总结

|----------------------------------------------------------------------------------------------------------|
| 以上就是实现QT启动新窗口的整个过程了,浏览过程中,如若发现错误,欢迎大家指 正,有问题的可以评论区留言或者私信。 最后,如果大家觉得有所帮助的话,可以点个 赞,谢谢大家!梦虽遥,追则能达;愿虽艰,持则可圆! |

QT启动新窗口完成!

相关推荐
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054964 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月4 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_531237174 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian4 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
雪人不是菜鸡4 天前
简单工厂模式
开发语言·算法·c#