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

相关推荐
Ciderw6 分钟前
侯捷 C++ 课程学习笔记:进阶语法之lambda表达式(二)
开发语言·c++·笔记·学习
小麦嵌入式17 分钟前
Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!)
linux·驱动开发·stm32·嵌入式硬件·mcu·qt·ubuntu
PfCoder37 分钟前
C#常用的循环语句
开发语言·c#·.net·visual studio·winform·c#循环语句
爱学习的小王!1 小时前
有关Java中的注解和反射
java·开发语言·笔记·python
Wyn_1 小时前
【QT】QScrollBar设置样式:圆角、隐藏箭头、上边距等
qt·qtdesigner样式
每次的天空1 小时前
kotlin与MVVM结合使用总结(一)
android·开发语言·kotlin
Bruce_Liuxiaowei2 小时前
基于Python的PDF转PNG可视化工具开发
开发语言·python·pdf
JuicyActiveGilbert2 小时前
【CMake指南】第3篇:编写可维护的构建脚本(变量与作用域管理)
开发语言·c++·教程·cmake
一匹电信狗2 小时前
浅谈Linux中的Shell及其原理
linux·服务器·c语言·开发语言·c++·ssh·unix
每次的天空3 小时前
kotlin与MVVM的结合使用总结(二)
android·开发语言·kotlin