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启动新窗口完成!

相关推荐
Tony Bai1 小时前
泛型重塑 Go 错误检查:errors.As 的下一站 AsA?
开发语言·后端·golang
hixiong1231 小时前
C# 编写一个XmlToDota的转换工具
开发语言·人工智能·yolo·c#
hqxstudying2 小时前
JAVA限流方法
java·开发语言·安全·限流
小楓12013 小时前
MySQL數據庫開發教學(二) 核心概念、重要指令
开发语言·数据库·mysql
一枚小小程序员哈3 小时前
基于php的萌宠社区网站的设计与实现、基于php的宠物社区论坛的设计与实现
开发语言·php·宠物
老赵的博客4 小时前
QT的项目pro qmake编译
开发语言·qt
枯萎穿心攻击5 小时前
从 Unity UGUI 到 Unreal UMG 的交互与高效实践:UI 事件、坐标系适配与性能优化
开发语言·ui·unity·性能优化·ue5·游戏引擎·虚幻引擎
WALL-EC5 小时前
Qt工具栏中图标槽函数没有响应的问题分析
开发语言·qt·osgearth
熙客6 小时前
Java:HashMap的使用
java·开发语言
weixin_307779136 小时前
C++进程监视器与自动启动程序
开发语言·c++·算法