基于极光服务的IM即时通讯设计一发送消息框的设计
·
上述就是自己做的仿qq的聊天工具,可以发图片,表情,3min间隔发消息显示时间,文件,用户名,恢复历史消息等

IM的整个ui设计

这是IM发送框的ui,将其提升为TextEdit类:

1 允许拖拽事件,并显示拖进来的文件图片:
QStringList m_picList;//获取文件链表
QStringList m_fileLsit;//获取图片链表
void TextEdit::dragEnterEvent(QDragEnterEvent *e)
{
if (e->mimeData()->hasFormat("text/uri-list"))//接受拖拽事件
{
e->acceptProposedAction();
}
else
{
e->ignore();
}
}
void TextEdit::dropEvent(QDropEvent *e)
{
QList<QUrl>urls = e->mimeData()->urls();
if (urls.isEmpty())
return;
for (int i = 0; i < urls.size(); i++) {
//获取拖进来的文件名,并且将文件图片显示在消息框中
QString filename = urls.at(i).toLocalFile();
QString extendname = filename.right(4).toLower();
QUrl Uri(QString("file://%1").arg(filename));
if (extendname.compare(".jpg") == 0 || extendname.compare(".jpeg") == 0 || extendname.compare(".png") == 0 || extendname.compare(".bmp") == 0)
{
QImage image = QImageReader(filename).read();
QTextDocument *TextDocument = this->document();
TextDocument->addResource(QTextDocument::ImageResource, Uri, QVariant(image));
QTextCursor cursor = this->textCursor();
QTextImageFormat imageformat;
int nsmall = image.width() / 150;
imageformat.setWidth(image.width() / nsmall);
imageformat.setHeight(image.height() / nsmall);
imageformat.setName(Uri.toString());
cursor.insertImage(imageformat);
m_picList.push_back(filename);
setFocus();
}
else
{
QImage image = QImageReader(":/Homepage/Resources/images/Homepage/filePressed.png").read();
QTextDocument * textDocument = this->document();
textDocument->addResource(QTextDocument::ImageResource, Uri, QVariant(image));
QTextCursor cursor = this->textCursor();
QTextImageFormat imageFormat;
imageFormat.setWidth(image.width());
imageFormat.setHeight(image.height());
imageFormat.setName(Uri.toString());
cursor.insertImage(imageFormat);
m_fileLsit.push_back(filename);
setFocus();
}
}
}
connect(ui.Btn_SendMessage, &QPushButton::clicked, this, &SendMessageDialog::SlotSendMessage);//点击发送消息
QString text = ui.textEdit->toPlainText();
QChar qcSlit = (QChar)(0xfffc);
QStringList textList = text.split(qcSlit);//拆分
// 把最后一个回车换行符删掉
while (text.endsWith("\n"))
{
text.remove(text.length() - 1, 1);
}
if (text.isEmpty())
{
QPoint point = ui.widget->mapToGlobal(ui.textEdit->pos());
QToolTip::showText(point, "发送消息不能为空,请重新输入");
return;
}
更多推荐



所有评论(0)