热门标签 | 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;项目实战源码》收录



推荐阅读
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社区 版权所有