封装一些常用的 qt 控件
作者:互联网
在 qt 中需要做 toast 效果和图片 tip 效果,故开发了下面一个类
后续会继续添加一些常用的控件
tool_tip.h
#include <qlabel.h> #include <qlayout.h> #include <qwidget.h> class ToolTips : public QWidget { Q_OBJECT public: enum TipTypes { kNone = 0, kToastTip, kPictureTip, }; public: // NOLINT explicit ToolTips(QWidget* parent = nullptr, TipTypes tip_type = kNone); ~ToolTips(); Q_DISABLE_COPY(ToolTips) void ShowToastTip(const QString& tip, const int time = 3000); protected: void CreateToastTip(); void CreatePictureTip(); void HideTip(); private: void Init(); QWidget* toast_tip_widget_; QHBoxLayout* toast_tip_layout_; QLabel* toast_tip_; QWidget* picture_tip_widget_; QHBoxLayout* picture_tip_layout_; QLabel* picture_tip_; TipTypes tip_type_; QString PictureTipText = "图片提示"; QString ToastTipType = { "QLabel {" "background-color: #7f7f7f;" "border-radius: 4px;" "color: #ffffff;" "}"}; // 重写 mousePressEvent 事件 void mousePressEvent(QMouseEvent* event) override; };
tooltip.cpp
#include "tool_tip.h" #include <qevent.h> #include <qimagereader.h> #include <qtimer.h> ToolTips::ToolTips(QWidget* parent, TipTypes tip_type) : QWidget(parent), tip_type_(tip_type) { Init(); // 默认隐藏 toast 提示 HideTip(); } ToolTips::~ToolTips() {} void ToolTips::Init() { switch (tip_type_) { case kToastTip: CreateToastTip(); break; case kPictureTip: CreatePictureTip(); break; default: break; } } void ToolTips::CreateToastTip() { toast_tip_widget_ = new QWidget(this); toast_tip_widget_->setObjectName(QStringLiteral("toast_tip_widget")); toast_tip_layout_ = new QHBoxLayout(toast_tip_widget_); toast_tip_layout_->setObjectName(QStringLiteral("toast_tip_layout")); toast_tip_ = new QLabel(toast_tip_widget_); toast_tip_->setObjectName(QStringLiteral("toast_tip")); QFont toast_tip_font = toast_tip_->font(); toast_tip_font.setPointSize(14 /** scale*/); // scale: 对于 dpi,这边需要乘以相应的屏幕缩放比 toast_tip_->setFont(toast_tip_font); toast_tip_->setStyleSheet(ToastTipType); toast_tip_->setAlignment(Qt::AlignCenter); toast_tip_layout_->addWidget(toast_tip_); toast_tip_layout_->setContentsMargins(0, 0, 0, 0); toast_tip_layout_->setSpacing(0); this->setLayout(toast_tip_layout_); } // TODO: 设计为通用的图片控件 void ToolTips::CreatePictureTip() { picture_tip_widget_ = new QWidget(this); picture_tip_widget_->setObjectName(QStringLiteral("picture_tip_widget")); picture_tip_layout_ = new QHBoxLayout(picture_tip_widget_); picture_tip_layout_->setObjectName(QStringLiteral("picture_tip_layout")); picture_tip_ = new QLabel(this); picture_tip_->setObjectName("picture_tip"); picture_tip_->setFixedSize(12, 12 /** scale*/); picture_tip_->setScaledContents(true); QImageReader pic(":/icon/picture_tip.png", "png"); pic.setAutoDetectImageFormat(false); picture_tip_->setPixmap(QPixmap::fromImageReader(&pic)); picture_tip_->setToolTip(PictureTipText); picture_tip_layout_->addWidget(picture_tip_); picture_tip_layout_->setContentsMargins(0, 0, 0, 0); picture_tip_layout_->setSpacing(0); this->setLayout(picture_tip_layout_); } void ToolTips::ShowToastTip(const QString& tip, const int time) { toast_tip_->setText(tip); QTimer::singleShot(time, this, &QWidget::hide); show(); } void ToolTips::HideTip() { switch (tip_type_) { case kToastTip: hide(); break; default: break; } } void ToolTips::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { if (tip_type_ == kPictureTip) { // 针对图片控件的鼠标点击做出你需要的事件 } event->accept(); } QWidget::mousePressEvent(event); }
标签:toast,控件,封装,qt,picture,tip,_-,ToolTips,layout 来源: https://www.cnblogs.com/strive-sun/p/16186587.html