当前位置: 首页 > news >正文

Qt启动新窗口

Qt启动新窗口

  • 1、前言
  • 2、新建ui文件
  • 3、创建ui界面
  • 4、隐藏当前界面
  • 5、包含头文件,启动新界面
    • 5.1在新的头文件里声明一个网络对象,更改构造函数
    • 5.2更改构造函数并赋值
    • 5.3启动新窗口
  • 6、清空输入框
  • 7、发送数据
  • 8、.h文件和.cpp文件
    • 8.1 widget.h
    • 8.2 widget.cpp
    • 8.3 clientchat.h
    • 8.4 clientchat.cpp
  • 9、总结

1、前言

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

2、新建ui文件

右键Froms,添加新文件

在这里插入图片描述

3、创建ui界面

在这里插入图片描述

4、隐藏当前界面

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

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

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

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

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

5.2更改构造函数并赋值

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

5.3启动新窗口

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

6、清空输入框

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

7、发送数据

//发送数据
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

#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

#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

#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

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

相关文章:

  • Android Dagger2 框架依赖图构建模块深度剖析(三)
  • 【react】react中的<></>和React Fragment的用法及区别详解
  • 使用DeepSeek AI开发智能问答网页应用
  • 分布式架构下的RPC解决方案
  • TCP 采用三次握手建立连接的原因
  • linux系统安装和激活conda
  • 【2025.3.13】记一次双系统笔记本加装固态硬盘记录 linux扩容 linux更换/home和/opt所在硬盘 windows无法调整亮度
  • ssm:商业异常处理流程
  • 日志Python安全之SSTI——Flask/Jinja2
  • 双3060、Ubuntu22.04、cuda12.8安装deepseek 32b-Q8
  • 面向对象Demo02
  • Python 实现大文件的高并发下载
  • 躲藏博弈中的策略优化:整合历史数据、概率论与博弈论
  • docker pull 镜像问题
  • RGV调度(四)--排队算法
  • 智能电话机器人的技术原理是什么?AI语音机器人评判标准是什么?
  • 数学建模之数学模型-3:动态规划
  • Liunx启动kafka并解决kafka时不时挂掉的问题
  • 用Python实现持续集成与部署(CI/CD)流程:自动化测试、构建与部署
  • 《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成
  • 博柏利上财年营收下降17%,计划裁员1700人助推股价涨超18%
  • 京东回应外卖系统崩溃:订单暴涨所致,已恢复
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 2025上海科技节本周六启幕,机器人和科学家同走AI科学红毯
  • 白玉兰奖征片综述丨综艺市场破局焕新,多元赛道重塑价值坐标