用Qlabel制作的自定义带图片的按钮

效果:

 步骤:

1、Qt Designer中新建UI,命名为:带图片按钮.UI;

2、在UI的背景处点击右键,改变样式表,添加颜色,设定背景色;

 

3、 Photoshop创建几个PNG图片,大小与需要的按钮尺寸一致,背景色为透明色;

4、Qt Designer中点击”编辑资源“按钮:

                                    

 5、新建资源文件icons.qrc

                   

 6、添加前缀buttons

  

              

 7、逐个添加之前创建的PNG图片,至此已将图片资源引入。以上步骤不清楚的,可参照pyqt5插入图片的两种方法(引入资源和不引入资源)超详细_pyqt5 图片_沂水弦音的博客-CSDN博客

           

 8、新建label,尺寸260*70,字体黑体20,样式表内容:

background-color:#4b5075;

border:2px solid rgb(43, 78, 140);

border-radius:8px;

color:#e6e6e6;

 9、label的“改变样式表”,“添加资源”,“image”,选择之前引入的图片资源

                     

              

 10、在Qt Designer中的显示效果如下:

               

 11、新建python文件,用PyRcc转换并导入图片资源。PyRcc的安装和使用,前面的连接里面也有。

后记:之前做了很多这种从头到尾都是自定义的部件,一方面是刚刚接触python编程,希望多一些实践,另一方面是深层次的知识掌握太少,只能用笨办法。

比如自定义的按钮,如果使用CSS的伪状态就会方便很多。

常用的伪状态:

  1. :hover:表示鼠标悬停在按钮上时的状态。
  2. :pressed:表示按钮被按下时的状态。
  3. :disabled:表示按钮被禁用时的状态。
  4. :checked:hover:表示按钮被选中且鼠标悬停在按钮上时的状态。
  5. :checked:pressed:表示按钮被选中且被按下时的状态。
  6. :checked:disabled:表示按钮被选中且被禁用时的状态。

 使用伪状态的好处是,在利用样式表定义部件的不同状态时,单独定义需要改变的特性即可。比如一个按钮,定义了背景色、边框等特性,在鼠标悬停时只需要改变背景色,别的特性无需改变,如果用setStyleSheet()的方法,就需要把所有的特性全部重新定义一遍。使用伪状态,就只需把背景色单独定义即可。

下面是一个范例:

在Qt Designer中新建一个PushButton,在右键-改变样式表,输入:

QPushButton {

/* 其他样式特性 */

background-color: rgba(255, 255, 255, 0);

color: white;

image: url(:/新前缀/PYS/exit.png);

}

QPushButton:hover {

/* 鼠标悬停时的样式 */

border:2px solid rgb(43, 78, 140);

border-radius:10px;

}

QPushButton:pressed {

/* 按下鼠标键时的样式 */

border:1px solid orange;

border-radius:10px;

background-color:#4b5075;

}

这样就简单完成了一个自定义的按钮。

效果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果您想要在Qt中使用QLabel来实现自定义的旋钮控件,可以通过以下步骤进行操作: 1. 创建一个QLabel控件,并设置它的大小和样式。 2. 重载QLabel的鼠标事件函数,响应鼠标按下、移动和释放事件。 3. 在鼠标事件函数中计算旋钮的位置和角度,并设置QLabel的旋转角度。 4. 可以使用QPropertyAnimation类来实现旋钮的动画效果。 下面是一个简单的示例代码,用于实现一个自定义的旋钮控件: ```cpp #include <QLabel> #include <QMouseEvent> #include <QPropertyAnimation> class Knob : public QLabel { Q_OBJECT public: Knob(QWidget *parent = nullptr) : QLabel(parent) { setFixedSize(50, 50); setStyleSheet("background-color: white; border-radius: 25px;"); m_animation = new QPropertyAnimation(this, "rotation"); m_animation->setDuration(500); m_animation->setEasingCurve(QEasingCurve::InOutCubic); } protected: void mousePressEvent(QMouseEvent *event) override { if (event->button() == Qt::LeftButton) { m_dragging = true; m_startPos = event->pos(); m_startAngle = rotation(); m_animation->stop(); } } void mouseMoveEvent(QMouseEvent *event) override { if (m_dragging) { QPoint delta = event->pos() - m_startPos; int angle = m_startAngle + delta.x(); setRotation(angle); emit valueChanged(angle); } } void mouseReleaseEvent(QMouseEvent *event) override { if (event->button() == Qt::LeftButton) { m_dragging = false; m_animation->setEndValue(rotation() / 360.0 * 100); m_animation->start(); } } signals: void valueChanged(int value); private: bool m_dragging = false; QPoint m_startPos; int m_startAngle = 0; QPropertyAnimation *m_animation = nullptr; Q_PROPERTY(int rotation READ rotation WRITE setRotation) int rotation() const { return property("rotation").toInt(); } void setRotation(int value) { setProperty("rotation", value); update(); } }; ``` 在这个示例代码中,我们继承了QLabel类,并添加了一个valueChanged信号,用于在旋钮的值发生变化时发出信号。在鼠标事件函数中,我们计算出旋钮的角度,并通过setRotation函数来设置QLabel的旋转角度。在释放鼠标事件中,我们使用QPropertyAnimation类来实现旋钮归位的动画效果。 使用这个自定义的旋钮控件也非常简单,只需要在创建控件后连接valueChanged信号即可: ```cpp Knob *knob = new Knob(this); connect(knob, &Knob::valueChanged, this, [this](int angle) { qDebug() << "Knob angle:" << angle; }); ``` 这个示例代码只是一个简单的实现,如果您需要更加复杂的旋钮控件,可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝海拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值