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

相关推荐
神仙别闹8 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读9 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
2601_9669496511 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717612 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
RAN114267600813 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .14 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^1382879887214 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒15 小时前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
泡泡鱼(敲代码中)15 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
2501_9336707915 小时前
平台招商运营校招能力模型:数据分析、SQL与增长场景拆解
开发语言