#ifndef FUNCTION_MESSAGE_WIDGET_H
#define FUNCTION_MESSAGE_WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
class QPaintEvent;
QT_END_NAMESPACE
class FunctionMessageWidget : public QWidget
{
Q_OBJECT
public:
explicit FunctionMessageWidget(QWidget *parent = Q_NULLPTR);
void setMessageText(const QString& text);
protected:
void paintEvent(QPaintEvent* event) Q_DECL_OVERRIDE;
private:
QString message_text_;
};
#endif // FUNCTION_MESSAGE_WIDGET_H
#include "function_message_widget.h"
#include <QPainter>
#include <QBrush>
FunctionMessageWidget::FunctionMessageWidget(QWidget *parent)
: QWidget(parent)
{
}
void FunctionMessageWidget::setMessageText(const QString& text)
{
message_text_ = text;
}
void FunctionMessageWidget::paintEvent(QPaintEvent* event)
{
Q_UNUSED(event)
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(Qt::gray));
// 框
QColor border_color = QColor(255, 140, 58);
painter.setBrush(QBrush(border_color));
painter.drawRoundedRect(QRect(rect().x(), rect().y(), rect().width(), rect().height() - 7), 8, 8);
//三角
QPointF points[3] = {
QPointF(rect().x() + 20, rect().height() - 7),
QPointF(rect().x() + 29, rect().height() - 7),
QPointF(rect().x() + 25, rect().height()),
};
QPen pen;
pen.setColor(border_color);
painter.setPen(pen);
painter.drawPolygon(points, 3);
//内容
QPen penText;
penText.setColor(Qt::white);
painter.setPen(penText);
QTextOption option(Qt::AlignLeft | Qt::AlignVCenter);
option.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
QFont font;
#ifdef Q_OS_MAC
font.setFamily("PingFang SC");
#else
font.setFamily("Source Han Sans CN Regular");
#endif
font.setPixelSize(16);
painter.setFont(font);
painter.drawText(QRect(rect().x() + 15, rect().y(), rect().width(), rect().height() - 7)
, message_text_, option);
}
调用:
FunctionMessageWidget* function_message_widget_ = new FunctionMessageWidget(this);
function_message_widget_->setMessageText(tr("click to look knowledge points."));
function_message_widget_->resize(207, 48);
function_message_widget_->setVisible(false);
void showMessage()
{
if (function_message_widget_) {
if (showing_timer_ == 0) {
showing_timer_ = startTimer(5000);
}
function_message_widget_->move(/*pos*/);
function_message_widget_->show();
function_message_widget_->raise();
}
}
void hideMessage()
{
if (function_message_widget_) {
function_message_widget_->hide();
function_message_widget_->deleteLater();
function_message_widget_ = Q_NULLPTR;
if (showing_timer_ != 0) {
killTimer(showing_timer_);
showing_timer_ = 0;
}
}
}
void timerEvent(QTimerEvent* e)
{
if (e->timerId() == showing_timer) {
// 超时自动隐藏
hideKnowledgePointTip();
}
}