Qt实现自定义图标性能

作者:hackett

微信公众号:加班猿

在上一节的根底上进行定义图标的性能

参考上一节的链接:Qt无边框窗口拖拽和暗影

成果:要做的是利用的放大放大、最小化性能,鼠标挪动和点击图标变色

筹备工作:

控件:

3个PushButton

1个Label

1个Frame

留神:须要进行布局,如果不布局可能会呈现不能放大放大的状况

筹备图标嵌入控件

能够上阿里巴巴矢量图标库下载本人想要的图标,也能够去其余网站或者本人制作

我这里下载了三个图标

QSS样式表

右键抉择扭转样式表,其余按键同理

增加色彩:

QPushButton为扭转这个按钮的属性

QPushButton:hover为鼠标挪动到按键的成果

QPushButton:pressed为鼠标按下按键的成果

增加资源:

能够抉择咱们资源外面的图片为按键填充图片

接下来就能够链接到槽函数做相应的解决即可

放大放大按钮须要做下margin值的设置

 void Widget::on_buttonMax_clicked() {  if(this->isMaximized())//是否曾经最大  {  ui->vLayout->setMargin(9);  //对应widget布局的Margin值  this->showNormal();  }else  {  ui->vLayout->setMargin(0); //全屏时widget布局的Margin值为0  this->showMaximized();  } }

源码:

main.cpp

 #include "widget.h" #include <QApplication>  int main(int argc, char *argv[]) {  QApplication a(argc, argv);  Widget w;  w.show();   return a.exec(); } 

widget.cpp

 #include "widget.h" #include "ui_widget.h" #include <QMouseEvent> #include <QWidget> #include <QGraphicsDropShadowEffect>  Widget::Widget(QWidget *parent) :  QWidget(parent),  ui(new Ui::Widget) {  ui->setupUi(this);   this->setWindowFlags(Qt::FramelessWindowHint);   QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect();   shadow->setBlurRadius(5);   //边框圆角  shadow->setColor(Qt::black);//边框色彩  shadow->setOffset(0);       //不偏移   ui->shadowWidget->setGraphicsEffect(shadow);   this->setAttribute(Qt::WA_TranslucentBackground);   //父窗口设置通明,只留下子窗口 }  Widget::~Widget() {  delete ui; }  void Widget::mouseMoveEvent(QMouseEvent *event) {  if(this->z == QPoint())//判断鼠标挪动 如果为空的话不挪动  return;  QPoint y = event->globalPos();//鼠标相当于桌面左上角的地位,鼠标全局地位  QPoint x = y - this->z;  this->move(x); }  void Widget::mousePressEvent(QMouseEvent *event) {  QPoint y = event->globalPos();//鼠标相当于桌面左上角的地位,鼠标全局地位  QPoint x = this->geometry().topLeft();//窗口左上角位于桌面左上角的地位,窗口地位  this->z = y - x; //定值,不变 }  void Widget::mouseReleaseEvent(QMouseEvent *event) {  this->z = QPoint(); //鼠标松开获取以后的坐标 }  void Widget::on_buttonClose_clicked() {  this->close(); }  void Widget::on_buttonMax_clicked() {  if(this->isMaximized())//是否曾经最大  {  ui->vLayout->setMargin(9);  //对应widget布局的Margin值  this->showNormal();  }else  {  ui->vLayout->setMargin(0); //全屏时widget布局的Margin值为0  this->showMaximized();  } }  void Widget::on_buttonMin_clicked() {  this->showMinimized(); }

widget.h

 #ifndef WIDGET_H #define WIDGET_H  #include <QWidget>  namespace Ui { class Widget; }  class Widget : public QWidget {  Q_OBJECT  public:  explicit Widget(QWidget *parent = 0);  ~Widget();   virtual void mouseMoveEvent(QMouseEvent *event);  virtual void mousePressEvent(QMouseEvent *event);  virtual void mouseReleaseEvent(QMouseEvent *event);  private slots:  void on_buttonClose_clicked();   void on_buttonMax_clicked();   void on_buttonMin_clicked();  private:  Ui::Widget *ui;  QPoint z; };  #endif // WIDGET_H

如果你感觉文章还不错,记得"点赞关注"

关注我的微信公众号【 加班猿 】能够获取更多内容