// 第一个参数指定聊天表情所在的目录(本地文件系统路径 或 Qt资源文件路径)
QFaceSelectWidget faceSelectWidget(":/faces/res/images/faces");
// 按钮点击时显示”聊天表情框“
// showOnTop()的第一个参数:”聊天表情框“显示在该参数所指定位置的上方(屏幕坐标系)。
// showOnTop()的第二个参数:”聊天表情框“在参数一所指定的位置”向上“偏移参数二所指定的距离。
QObject::connect(btn, &QPushButton::clicked, [=, &faceSelectWidget]{
faceSelectWidget.showOnTop(QCursor::pos(), btn->height()/2);
});
// 表情选择完成后,在label中播放所选择的gif动画
QObject::connect(&faceSelectWidget, &QFaceSelectWidget::selected, [=](const QString &filename){
gifLabel->setFileName(filename);
gifLabel->start();
});
class QGifLabel : public QLabel
{
Q_OBJECT
public:
explicit QGifLabel(QWidget *parent = 0);
QGifLabel(const QString &fileName, QWidget *parent = 0);
void setFileName(const QString &fileName, bool start = false);
void start();
void stop();
signals:
void clicked(const QString &fileName);
protected:
void mouseReleaseEvent(QMouseEvent *e);
void enterEvent(QEvent *e);
void leaveEvent(QEvent *e);
private:
QMovie *m_movie;
};
class QFaceSelectWidget : public QWidget
{
Q_OBJECT
public:
explicit QFaceSelectWidget(const QString &faceIconDir, QWidget *parent = 0);
~QFaceSelectWidget();
void showOnTop(QPoint &pos, int offsetY = 0);
signals:
void selected(const QString &fileName);
private:
QMap<int, QString> m_iconName;
void mapIconName();
};
原文地址:http://blog.csdn.net/xiaohui_hubei/article/details/38796565