"); //-->
作者:武汉华嵌技术部
本文主要介绍了怎么使用QTextEdit控件实现类似QQ聊天对话框的效果,包括令对话框显示不同的字体、颜色,实现QQ震动效果和QQ表情效果(即在QTextEdit中显示图片)。Demo运行的界面如下图所示:
点击相关按钮可以改变输入文本框的字体,改变输入文本框的颜色,实现QQ震动效果,以及在文本框中添加自定义图片。下面将通过demo讲解实现原理。
#include <QtGui>
#include "qt1.h"
Qt1::Qt1(QWidget *parent):QDialog(parent)
{
setupUi(this);
tbfont->setIcon(QIcon("./images/bold.png"));
tbcolor->setIcon(QIcon("./images/color.png"));
tbtru->setIcon(QIcon("./images/italic.png"));
tbbq->setIcon(QIcon("./images/biaoqing.png"));
tbsend->setIcon(QIcon("./images/underline.png"));
connect(tbfont,SIGNAL(clicked()),this,SLOT(fontfun()));//字体类型
connect(tbcolor,SIGNAL(clicked()),this,SLOT(colorfun()));//字体颜色
connect(tbtru,SIGNAL(clicked()),this,SLOT(trumfun()));//震动
connect(tbbq,SIGNAL(clicked()),this,SLOT(insertImage()));//插入图片
connect(tbsend,SIGNAL(clicked()),this,SLOT(sendfun()));//发送消息
}
void Qt1::fontfun()//设置字体类型
{
bool ok;
QFont font = QFontDialog::getFont(
&ok, QFont("Helvetica [Cronyx]", 10), this);
if (ok)
{
te2->setFont(font);
f = font;
}
}
void Qt1::colorfun() //设置字体颜色
{
QColor color = QColorDialog::getColor ( Qt::red, this );
te2->setTextColor(color);
c = color;
}
void Qt1::trumfun() //震动效果实现
{
QPoint p = getPos(this);//获取当前窗口坐标
int x = p.x();
int y = p.y();
int i = 0;
for(i=0;i<10;i++)//改变窗口位置实现震动效果
{
this->move(x+5,y+5);
usleep(300);
this->move(x,y);
usleep(300);
this->move(x-5,y-5);
usleep(300);
this->move(x,y);
}
this->move(x-1,y-28);
}
void Qt1::sendfun()
{
QFont ff (QFont( "AR PL UKai CN,10,-1,5,50,0,0,0,0,0" )) ;
QColor cc (0,0,0);
setInsertTextColor(cc);//设置系统时间字体颜色
setInsertTextFont(ff);//设置系统时间字体类型
te1->append(showTime());
setInsertTextColor(c);//设置插入字体颜色
setInsertTextFont(f);//设置插入字体字体类型
te1->append(te2->toPlainText());
te2->clear();
}
void Qt1::setInsertTextColor(const QColor &col)//把col颜色作为字体颜色
{
QTextCharFormat fmt;//文本字符格式
fmt.setForeground(col);// 前景色(即字体色)设为col色
QTextCursor cursor = te1->textCursor();//获取文本光标
cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示
te1->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
}
void Qt1::setInsertTextFont(const QFont &col)//把col颜色作为字体颜色
{
QTextCharFormat fmt;//文本字符格式
fmt.setFont(col);//字体
QTextCursor cursor = te1->textCursor();//获取文本光标
cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示
te1->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
}
void Qt1::insertImage() //文本编辑框中插入图片
{
QString file = QFileDialog::getOpenFileName(this, tr("Open File"),"pic/",\
tr("Images (*.png *.jpg)"));
QUrl Uri ( QString ( "file://%1" ).arg ( file ) );
QImage image = QImageReader ( file ).read();
QTextDocument * textDocument = te2->document();
textDocument->addResource( QTextDocument::ImageResource, Uri, QVariant ( image ) );
QTextCursor cursor = te2->textCursor();
QTextImageFormat imageFormat;
imageFormat.setWidth( image.width() );
imageFormat.setHeight( image.height() );
imageFormat.setName( Uri.toString() );
cursor.insertImage(imageFormat);
}
QPoint Qt1::getPos(QWidget* widget)//获取窗体位置坐标
{
if (NULL == widget)
{
return QPoint(-1,-1);
}
float px = 0;
float py = 0;
QWidget *parent = widget;
QWidget *preParent= NULL;
do
{
QPoint p = parent->pos();
px += p.x();
py += p.y();
preParent = parent ;
parent = parent->parentWidget();
} while (NULL != parent);
QSize size = preParent->frameSize();
QSize size2 = preParent->size();
px = px + (size.width() - size2.width())/2;
py = py + (size.height() - size2.height() - (size.width() - size2.width())/2);
QPoint pr(px, py);
return pr;
}
QString Qt1::showTime()//获取系统时间
{
QTime time=QTime::currentTime();
QString text = time.toString("hh:mm:ss");
return text;
}
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
意法半导体Stellar P3E:车载边缘AI MCU 开启汽车多合一电控新时代
Ceva新一代UWB IP具有更远的传输距离和更高的吞吐量
应用材料携手美光 加速HBM、闪存及DRAM技术研发
ZLG500C Mifare卡读写模块应用
ZLG500C 应用文档V1.0 (仅对购买ZLG500C产品的客户开...
Groq向三星提出AI芯片扩产需求,推论芯片市场或迎爆发
IAR扩展嵌入式开发平台,推出面向安全关键型应用的长期支持(LTS)服务
Nordic扩展nRF54L系列,推出入门级低功耗蓝牙SoC
SEALSQ推出量子系统PQC栈
中国IT行业培训 热打就业牌
国立成功大学:基于 NetFPGA 平台之 OpenFlow 虚拟网路频宽管理系统
ZLG500BX2 器件读卡模块简介
两用声控灯开关电路(SK-II)
伊朗局势紧张,亚洲汽车供应链面临冲击
声控延迟灯开关电路(2)
声控双灯开关电路(SK-IV)
声控延迟灯开关电路(3)
九种不同类型的美女
赛灵思宣传片
ZLG500B读卡模块演示软件
第三届OpenHW开源硬件与嵌入式大赛总决赛现场实录
声波遥控灯开关电路(2)
专家称:SCO对IBM的起诉缺乏足够证据
无线芯片厂商新排名,高通TI成赢家
上海贝岭八英寸芯片生产线可望2004年试生产
ZLG500B 应用文档V1.4 (仅对购买ZLG500B产品的客户开...
Emerson推出NI USRP X420软件定义无线电
电动汽车磁铁市场预计到2030年达到95亿美元
大嘴业话:企业转型模式的探讨
北京工业大学:基于FPGA的情绪检测程序与相关智能宠物的开发