imageswitch.zip
大小:17.76KB
价格:49积分
下载量:0
评分:
5.0
上传者:u012959478
更新日期:2025-09-22

QT实现图片开关控件-自定义控件

资源文件列表(大概)

文件名
大小
imageswitch/
-
imageswitch/frmimageswitch.cpp
1.15KB
imageswitch/frmimageswitch.h
394B
imageswitch/frmimageswitch.ui
942B
imageswitch/image/
-
imageswitch/image/imageswitch/
-
imageswitch/image/imageswitch/btncheckoff1.png
3.52KB
imageswitch/image/imageswitch/btncheckoff2.png
1.93KB
imageswitch/image/imageswitch/btncheckoff3.png
638B
imageswitch/image/imageswitch/btncheckon1.png
3.14KB
imageswitch/image/imageswitch/btncheckon2.png
2.23KB
imageswitch/image/imageswitch/btncheckon3.png
696B
imageswitch/imageswitch.cpp
2.36KB
imageswitch/imageswitch.h
1.25KB
imageswitch/imageswitch.pro
793B
imageswitch/main.cpp
182B
imageswitch/main.qrc
390B

资源内容介绍

在QT中创建一个图片开关控件。该控件允许用户切换显示不同状态的图像,类似于开关的功能。
#include "imageswitch.h"#include <QPainter>ImageSwitch::ImageSwitch(QWidget *parent) : QWidget(parent){ isChecked = false; buttonStyle = ButtonStyle_2; imgOffFile = ":/image/imageswitch/btncheckoff2.png"; imgOnFile = ":/image/imageswitch/btncheckon2.png"; imgFile = imgOffFile;}void ImageSwitch::mousePressEvent(QMouseEvent *){ imgFile = isChecked ? imgOffFile : imgOnFile; isChecked = !isChecked; Q_EMIT checkedChanged(isChecked); this->update();}void ImageSwitch::paintEvent(QPaintEvent *){ QPainter painter(this); painter.setRenderHints(QPainter::SmoothPixmapTransform); QImage img(imgFile); img = img.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); //按照比例自动居中绘制 int pixX = rect().center().x() - img.width() / 2; int pixY = rect().center().y() - img.height() / 2; QPoint point(pixX, pixY); painter.drawImage(point, img);}QSize ImageSwitch::sizeHint() const{ return QSize(87, 28);}QSize ImageSwitch::minimumSizeHint() const{ return QSize(87, 28);}bool ImageSwitch::getChecked() const{ return isChecked;}void ImageSwitch::setChecked(bool isChecked){ if (this->isChecked != isChecked) { this->isChecked = isChecked; imgFile = isChecked ? imgOnFile : imgOffFile; this->update(); }}ImageSwitch::ButtonStyle ImageSwitch::getButtonStyle() const{ return this->buttonStyle;}void ImageSwitch::setButtonStyle(const ImageSwitch::ButtonStyle &buttonStyle){ if (this->buttonStyle != buttonStyle) { this->buttonStyle = buttonStyle; if (buttonStyle == ButtonStyle_1) { imgOffFile = ":/image/imageswitch/btncheckoff1.png"; imgOnFile = ":/image/imageswitch/btncheckon1.png"; this->resize(87, 28); } else if (buttonStyle == ButtonStyle_2) { imgOffFile = ":/image/imageswitch/btncheckoff2.png"; imgOnFile = ":/image/imageswitch/btncheckon2.png"; this->resize(87, 28); } else if (buttonStyle == ButtonStyle_3) { imgOffFile = ":/image/imageswitch/btncheckoff3.png"; imgOnFile = ":/image/imageswitch/btncheckon3.png"; this->resize(96, 38); } imgFile = isChecked ? imgOnFile : imgOffFile; setChecked(isChecked); this->update(); updateGeometry(); }}

用户评论 (0)

发表评论

captcha