热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

27,flutterrow中组件位置

插入行ui-usrTblWidget-insertRow(0);ui-usrTblWidget-setItem(0,0,usr);追加聊天记录ui-msgBrow

//插入行

ui->usrTblWidget->insertRow(0);

ui->usrTblWidget->setItem(0,0,usr);

//追加聊天记录

ui->msgBrowser->setTextColor(Qt::gray);

ui->msgBrowser->append( QString("%1 上线了").arg(username));

//在线人数更新

ui->usrNumLbl->setText(QString(“在线用户:%1人”).arg(ui->usrTblWidget->rowCount()));

//把自身信息广播出去

sndMsg(UsrEnter);

}

}

//广播UDP消息

void Widget::sndMsg(MsgType type)

{

//发送的消息分为三种数据类型

//发送的数据 做分段处理 第一段:类型 第二段:用户名 第三段 具体内容

QByteArray array;

QDataStream stream(&array, QIODevice::WriteOnly);

stream <

switch(type){

case Msg://发送普通消息

if(ui->msgTxtEdit->toPlainText() &#61;&#61; “”) //判断如果用户没有输入内容&#xff0c;不发任何消息

{

QMessageBox::warning(this,“警告”,“发送内容不能为空”);

return ;

}

//第三段数据&#xff0c;具体说的话

stream <

break;

case UsrEnter://发送新用户进入的消息

break;

case UsrLeft://发送用户离开的消息

break;

default:

break;

}

//书写报文

udpSocket->writeDatagram(array, QHostAddress::Broadcast, port);

}

//获取到用户名

QString Widget::getUsr()

{

return this->uName;

}

//获取聊天信息

QString Widget::getMsg()

{

QString str &#61; ui->msgTxtEdit->toHtml();

//清空输入框

ui->msgTxtEdit->clear();

ui->msgTxtEdit->setFocus();

return str;

}

//重写关闭窗口的事件

void Widget::closeEvent(QCloseEvent * e)

{

emit this->closeWidget();

sndMsg(UsrLeft);

//断开套接字

udpSocket->close();

udpSocket->destroyed();

QWidget::closeEvent(e);

}

Widget::~Widget()

{

delete ui;

}

widget.h

#ifndef WIDGET_H

#define WIDGET_H

#include

#include

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

//分别代表 聊天信息、新用户加入、用户退出

enum MsgType {Msg,UsrEnter,UsrLeft};

public:

explicit Widget(QWidget *parent, QString name);

~Widget();

private:

Ui::Widget *ui;

signals:

//关闭窗口发送关闭信息

void closeWidget();

public:

//关闭事件

void closeEvent(QCloseEvent *);

public:

void sndMsg(MsgType type); //广播UDP消息

void usrEnter(QString username);//处理新用户加入

void usrLeft(QString usrname,QString time); //处理用户离开

QString getUsr(); //获取用户名

QString getMsg(); //获取聊天信息

private:

QUdpSocket * udpSocket; //udp套接字

qint16 port; //端口

QString uName; //用户名

void ReceiveMessage(); //接受UDP消息

};

#endif // WIDGET_H

dialoglist.cpp

#include “dialoglist.h”

#include “ui_dialoglist.h”

#include

#include “widget.h”

#include

DialogList::DialogList(QWidget *parent) :

QWidget(parent),

ui(new Ui::DialogList)

{

ui->setupUi(this);

//设置标题

setWindowTitle(“MyChat”);

//设置图标

setWindowIcon(QPixmap(":/images/qq.png"));

//准备图标

QListnameList;

nameList <<“aaaaaa1111” <<“aaaaaa2222” <<“aaaaaa3333”<<“aaaaaa4444”<<“aaaaaa5555”

<<“aaaaaa6666”<<“aaaaaa7777”<<“aaaaaa8888”<<“aaaaaa9999”;

QStringList iconNameList; //图标资源列表

iconNameList <<“ftbz”<<“ymrl” <<“qq” <<“Cherry”<<“dr”

<<“jj”<<“lswh”<<“qmnn”<<“wy”;

QVector vToolBtn;

for(int i &#61; 0; i <9; i&#43;&#43;)

{

//设置头像

QToolButton * btn &#61; new QToolButton;

//设置文字

//btn->setText(“aaaaaaa”);

btn->setText(nameList[i]);

//设置头像

//btn->setIcon(QPixmap(":/images/ftbz.png"));

//设置头像

QString str &#61; QString(":/images/%1.png").arg(iconNameList.at(i));

btn->setIcon(QPixmap(str));

//设置头像大小

btn->setIconSize(QPixmap(":/images/ftbz.png").size());

//设置按钮的风格 透明

btn->setAutoRaise(true);

//设置文字和图片一起显示

btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

//加到垂直布局中

ui->vLayout->addWidget(btn);

//将创建的button加入到容器中,保存储存的按钮

vToolBtn.push_back(btn);

//9个标示默认初始化

isShow.push_back(false);

}

//对9个按钮 进行添加信号槽

for(int i &#61; 0 ; i

{

connect(vToolBtn[i],&QToolButton::clicked,&#61;{

//如果被打开了&#xff0c;就不要再次打开

if(isShow[i])

{

QString str &#61; QString("%1窗口已经被打开了").arg(vToolBtn[i]->text());

QMessageBox::warning(this,“警告”,str);

return;

}

isShow[i] &#61; true;

//弹出聊天对话框

//构造聊天窗口时候 告诉这个窗口他的名字 参数1 顶层方式弹出 参数2 窗口名字

//注意&#xff01; Widget构造函数 并没有这两个参数&#xff0c;需要重新写构造函数&#xff0c;增加一个新的参数QString name

Widget * widget &#61; new Widget(0,vToolBtn[i]->text());

//设置窗口标题

widget->setWindowTitle(vToolBtn[i]->text());

widget->setWindowIcon(vToolBtn[i]->icon());

widget->show();

//监听窗口关闭的信息&#xff0c;发送者是widget发送的

connect(widget,&Widget::closeWidget,&#61;{

isShow[i] &#61; false;

});

});

}

}

DialogList::~DialogList()

{

delete ui;

}

dialoglist.h

#ifndef DIALOGLIST_H

#define DIALOGLIST_H

#include


总结

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去宁螺丝&#xff0c;但你要进去得先学会面试的时候造飞机不是么&#xff1f;


作者13年java转Android开发&#xff0c;在小厂待过&#xff0c;也去过华为&#xff0c;OPPO等&#xff0c;去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;不成体系的学习效果低效漫长且无助。


这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题&#xff0c;把技术点整理成了视频和PDF&#xff08;实际上比预期多花了不少精力&#xff09;&#xff0c;包含知识脉络 &#43; 诸多细节&#xff0c;由于篇幅有限&#xff0c;这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获&#xff1a;

960页全网最全Android开发笔记

资料太多&#xff0c;全部展示会影响篇幅&#xff0c;暂时就先列举这些部分截图


当程序员容易&#xff0c;当一个优秀的程序员是需要不断学习的&#xff0c;从初级程序员到高级程序员&#xff0c;从初级架构师到资深架构师&#xff0c;或者走向管理&#xff0c;从技术经理到技术总监&#xff0c;每个阶段都需要掌握不同的能力。早早确定自己的职业方向&#xff0c;才能在工作和能力提升中甩开同龄人。


&#xff1f;


作者13年java转Android开发&#xff0c;在小厂待过&#xff0c;也去过华为&#xff0c;OPPO等&#xff0c;去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;不成体系的学习效果低效漫长且无助。


这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题&#xff0c;把技术点整理成了视频和PDF&#xff08;实际上比预期多花了不少精力&#xff09;&#xff0c;包含知识脉络 &#43; 诸多细节&#xff0c;由于篇幅有限&#xff0c;这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获&#xff1a;

[外链图片转存中…(img-IYenjUDU-1643865719489)]

[外链图片转存中…(img-dQePQ2rM-1643865719490)]

资料太多&#xff0c;全部展示会影响篇幅&#xff0c;暂时就先列举这些部分截图


当程序员容易&#xff0c;当一个优秀的程序员是需要不断学习的&#xff0c;从初级程序员到高级程序员&#xff0c;从初级架构师到资深架构师&#xff0c;或者走向管理&#xff0c;从技术经理到技术总监&#xff0c;每个阶段都需要掌握不同的能力。早早确定自己的职业方向&#xff0c;才能在工作和能力提升中甩开同龄人。



本文已被CODING开源项目&#xff1a;《Android学习笔记总结&#43;移动架构视频&#43;大厂面试真题&#43;项目实战源码》收录



推荐阅读
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
author-avatar
沧桑的悟空2502859857
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有