zoukankan      html  css  js  c++  java
  • Qt:添加点击事件的Label并显示图片

    1.给label添加点击事件

      Qt中原本的label是没有点击事件的,如果想添加点击事件的话,可以继承QLabel类并重载鼠标事件(比如mousePressedEvent),然后在鼠标事件中发送一个信号,具体如下:

    // clicklabel.h
    
    #ifndef CLICKEDLABEL_H
    #define CLICKEDLABEL_H
    
    #include <QWidget>
    #include <QLabel>
    
    class ClickedLabel : public QLabel
    {
        Q_OBJECT
    public:
        ClickedLabel(QWidget *parent=0): QLabel(parent){}
        ~ClickedLabel() {}
    signals:
        void clicked(ClickedLabel* click); // 点击信号
    protected:
        void mouseReleaseEvent(QMouseEvent*); // 重载了鼠标释放事件
    
    };
    
    #endif // CLICKEDLABEL_H
    // clicklabel.c
    
    #include "clickedlabel.h"
    void ClickedLabel::mouseReleaseEvent(QMouseEvent *)
    {
        emit clicked(this); // 在点击事件中发送信号
    }

    2.显示图片

      使用QPixmap可以在label中显示图片,具体如下:

    QString path = "logo.png";  // 定义图片的路径
    
    QPixmap img(path); // 实例化一个img
    
    ui->label_img->setPixmap(img); // 在label中添加img
    
    ui->label_img->resize(img.width(),img.height());  // 使用图片尺寸设置label大小

    3.完整例程

      新建一个空白的窗体,然后在代码中添加:

    // 在mainwindow.h中添加 (包含头文件 clicklabel.h)
    private slots:
      void on_label_clicked();
    private:   ClickLabel * clickLabel; // 在mainwindow.cpp中的构造函数中添加 clickLabel = new ClickLabel(this); QString path="logo.png"; QPixmap img(path); clickLabel->setPixmap(img); clickLabel->resize(img.width(),img.height());
    connect(clickLabel,SIGNAL(clicked(ClickLabel*)),this,SLOT(on_label_clicked()));
    ------------ 转载请注明出处 ------------
  • 相关阅读:
    mybatis-generator自动生成代码时,只生成insert方法
    elasticsearch-head-master下运行npm install报npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
    fs.default.name和fs.defaultFS
    zookeeper集群为什么要是单数
    Quorom机制
    把数据库放入Docker是一个好主意吗?
    JVM GC算法CMS详解
    JVM之——CMS
    对于TCP/IP协议的三次握手和四次挥手的理解
    JVM G1和CMS
  • 原文地址:https://www.cnblogs.com/whlook/p/6810346.html
Copyright © 2011-2022 走看看