QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)

这篇具有很好参考价值的文章主要介绍了QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 QT实现tcpf服务器代码:(源文件)

#include "widget.h"
#include "ui_widget.h"

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

    //给服务器指针实例化空间
    server = new QTcpServer(this);
}

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

//启动服务器按钮对应的槽函数
void Widget::on_startBtn_clicked()
{
    //获取ui界面上的端口
   quint16 port = ui->portEdit->text().toInt();

   //将服务器设置成监听状态
   if(server->listen(QHostAddress::Any,port))
   {
       QMessageBox::information(this,"","服务器启动成功");
   }
   else
   {
       QMessageBox::information(this,"","服务器启动失败");
   }
   //此时服务器已经进入监听状态,如果有客户端发来连接请求,那么该服务器就会自动发射一个newConnection信号
   //我们可以将该信号连接到自定义的槽函数中处理新连接的套接字
   connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}

void Widget::newConnection_slot()
{
    qDebug()<<"有新客户连接";
    //获取最新连接的客户端套接字
    QTcpSocket *s=server->nextPendingConnection();
    //将该套接字放入到客户端容器中
    socketlist.push_back(s);
    //此时,客户端与服务器已经建立起来连接
    //如果有客户端向服务器发来数据,那么该客户端会自动发射一个readyRead信号
    //我们可以在该信号对应的槽函数中,读取客户端中的数据
    connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}
void Widget::readyRead_slot()
{
    //移除无效客户端
    for(int i=0;i<socketlist.count();i++)
    {
        if(socketlist.at(i)->state()==0)
        {
            socketlist.removeAt(i);
        }
    }
     //遍历客户端套接字,寻找是哪个客户端有数据待读
    for(int i=0;i<socketlist.count();i++)
    {
        //判断当前套接字是否有数据待读
        if(socketlist.at(i)->bytesAvailable()!=0)
        {
            //读取套接字中的所有数据
            QByteArray msg = socketlist.at(i)->readAll();

            //将数据展示到ui界面
            ui->listWidget->addItem(QString::fromLocal8Bit(msg));
            //将数据发送给所有客户端
            for(int j=0;j<socketlist.count();j++)
            {
                //将数据写入到所有客户端套接字中
                socketlist.at(j)->write(msg);
            }
        }
    }
}

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMessageBox>
#include <QDebug>
#include <QList>
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_startBtn_clicked();
    void newConnection_slot();
    void readyRead_slot();

private:
    Ui::Widget *ui;

    QTcpServer *server;
    QList<QTcpSocket *> socketlist;
};
#endif // WIDGET_H

文章来源地址https://www.toymoban.com/news/detail-615263.html

到了这里,关于QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows消息 鼠标消息、定时器消息

    鼠标消息分类: 1.基本鼠标消息 WM_LBUTTONDOWN -鼠标左键按下 WM_LBUTTONUP -鼠标左键抬起 WM_RBUTTONDOWN -鼠标右键按下 WM_RBUTTONUP -鼠标右键抬起 附带消息: wParam:其他按键的状态,例如CTRL/SHIFT等 lParam:鼠标的位置,窗口客户区坐标系。 LOWORD x坐标位置 HIWORD y坐标位置 一般情况鼠标

    2024年02月10日
    浏览(40)
  • Qt 定时器

    startTimer(); 注意:定时器参数要是全局或者静态变量。   没有结束函数 int timerId=startTimer(); startTimer()返回定时器标志 需设置为类的成员--类内使用 通过定时器事件判断   QTimer类事件间隔到达 QTimer不需要ID,只需要对象不同就可以区别定时器。 start() stop()     timer=new QTimer(thi

    2024年02月09日
    浏览(41)
  • QT学习之定时器

    一、定时器 第一种方式: 1 利用事件 void timerEvent ( QTimerEvent * ev) 2 启动定时器 startTimer( 1000) 毫秒单位 3 timerEvent 的返回值是定时器的唯一标示 可以和ev-timerid 做比较 第二种方式: 1 利用定时器类 QTimer 2 创建定时器对象 QTimer * timer = new QTimer(this) 3 启动定时器 timer-start(毫秒)

    2024年02月16日
    浏览(44)
  • Qt学习(一)-------- 定时器、绘图

    1.定时器 QTimer    ⭐  创建定时器对象  QTimer *timer = new QTimer(this);    ⭐ 启动定时器 timer-start(毫秒);    ⭐ 监听信号 connect(timer,QTimer::timeout,[=](){     }); -----------------------------------------------------------例子-----------------------------------------------------------     ⭐ 点击暂停,实现

    2024年02月03日
    浏览(42)
  • 【QT】时间日期与定时器

    目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 时间日期是经常

    2024年02月04日
    浏览(49)
  • 【QT】——定时器QTimer的使用

    目录 常见的函数 构造函数 获取/设置定时器间隔时间 启动/停止定时器  信号 设置定时器的时间的两种方法 设置定时器精度 其他函数 静态函数 实例 QTimer是QT框架中的定时器类型,它的使用方法如下: 定义一个调用QTimer对象,调用start()函数启动定时器,则 定时器则会周期

    2024年02月12日
    浏览(41)
  • 对定时器中影子寄存器以及更新操作和更新事件理解

    本人是stm32初学者,近期在看定时器参考文档时遇到些阻碍,再参考了众多CSDN博主的文章后,得到了一些个人理解,将其发布出来,本文也对一些参考的文章进行了不少复制粘贴同时也在这些文章必要位置加入了个人看法,文章链接附在最后 由于本人是初学者,本文一定存在

    2024年02月05日
    浏览(42)
  • 自定义循环队列、软件定时器、事件集,实用嵌入式代码库

    本篇博文分享一个很实用的嵌入式代码库。 它可灵活应用到有无RTOS的程序中,采用C语言面向对象的思路实现各个功能,尽可能最大化的复用代码,目前为止工具包包含: 循环队列、软件定时器、事件集 。 网址:https://download.csdn.net/download/m0_38106923/87765476?spm=1001.2014.3001.550

    2024年02月03日
    浏览(54)
  • 51单片机定时器使用与计算-----day3

    51单片机定时器-----day3 8051单片机介绍: 集成 8位CPU、 4K字节ROM(掉电不丢失)、 128字节RAM(掉电丢失)、 4个8位并口、 1个全双工串行口、2个16位定时/计数器。 寻址范围64K, 并有控制功能较强的布尔处理器(带位操作)。 单片机结构内部框图: 机器周期和指令周期 ( 1)

    2024年02月03日
    浏览(43)
  • qt学习:QTimer定时器+重复计时+单次计时

    在指定的间隔时间会发送出一个timeout信号,关联对应的槽函数 #includeQTimer

    2024年01月19日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包