QLabel以及QWidget显示图片/来自主题的图标,并添加选中和hover效果

首先实现自己的label类:

myLabel.h:

#ifndef MYLABEL_H
#define MYLABEL_H
#include <QEvent>
#include <QLabel>
class myLabel : public QLabel
{
public:
    myLabel();
    ~myLabel();
    void enterEvent(QEvent *e);  //hover鼠标进入
    void leaveEvent(QEvent *e);  //hover鼠标离开
    void mousePressEvent(QMouseEvent *e); //鼠标按下
private:
    bool ifPressed;
};

#endif // MYLABEL_H

myLabel.cpp:

#include "myLabel.h"
#include <QPalette>

myLabel::myLabel()
{
    //setFrameShape(QFrame::Box); //先设置边框为矩形
    //setStyleSheet("border-width: 0px;");
    ifPressed = false;
}

myLabel::~myLabel()
{

}

void myLabel::enterEvent(QEvent *e)
{
    if(ifPressed == false)
        setStyleSheet("border-width: 4px;border-style: solid;border-color: rgb(220,20,60);");
}

void myLabel::leaveEvent(QEvent *e)
{
    if(ifPressed == false)
        setStyleSheet("border-width: 0px;");
}

//鼠标按下
void myLabel::mousePressEvent(QMouseEvent *e)
{

    if(ifPressed == false)
    {
        ifPressed = true;
        QColor highLightColor = palette().color(QPalette::Highlight);
        QString stringColor = QString("rgb(%1,%2,%3)")
               .arg(highLightColor.red())
               .arg(highLightColor.green())
               .arg(highLightColor.blue());
        QString stringStyleSheet = QString("border-width: 4px;border-style: solid;border-color: %1;").arg(stringColor);
        setStyleSheet(stringStyleSheet);
    }
    else
    {
        ifPressed = false;
        setStyleSheet("border-width: 0px;");
    }

}

这里用QColor获取了palette调色板的颜色,并用QString的方式进行设置(也许有更简单的方式实现。。。。我直接用palette不行)。

mainwindow.cpp部分代码:

    ui->setupUi(this);

    myLabel *pic = new myLabel;
    pic -> setParent(this);
    pic->setGeometry(rect().x()+80, rect().y()+30,400, 400);

    QPixmap pix("/home/kylin-fc/image/123.png");
    pic->setPixmap(pix);
    //pic->setPixmap(QPixmap::fromImage(QIcon::fromTheme("ukui-control-center").pixmap(24,24).toImage()));

完整项目地址:

https://download.csdn.net/download/IT8343/15840250?spm=1001.2014.3001.5503

附Qwidget显示图片:

    QSize IMAGE_SIZE(381, 221);
    ui->previewWidget->setAutoFillBackground(true);
    QPalette palette;
    palette.setBrush(QPalette::Background, QBrush(QPixmap("/home/kylin-fc/TEMP.bmp").scaled(IMAGE_SIZE)));
    ui->previewWidget->setPalette(palette);

    /*显示屏保

        QStringList args;
        QString screensaver_bin = "/usr/lib/ukui-screensaver/ukui-screensaver-default";
        args << "-window-id" << QString::number(ui->previewWidget->winId());
        process->startDetached(screensaver_bin, args);
    */

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值