首先看下工程结构
头文件(clickablelabel.h)代码:
#ifndef CLICKABLELABEL_H #define CLICKABLELABEL_H #include <QLabel> #include <QWidget> #include <Qt> class ClickableLabel : public QLabel { Q_OBJECT public: explicit ClickableLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); ~ClickableLabel(); signals: void clicked(); protected: void mousePressEvent(QMouseEvent* event); }; #endif // CLICKABLELABEL_H
Source文件(clickabkekabel.cpp)
#include "clickablelabel.h" #include "clickablelabel.h" ClickableLabel::ClickableLabel(QWidget* parent, Qt::WindowFlags f) : QLabel(parent) { } ClickableLabel::~ClickableLabel() {} void ClickableLabel::mousePressEvent(QMouseEvent* event) { emit clicked(); }
mainwindow.ui 添加一个QLabel控件,然后提升QLabel为自定义的ClickabelLabel,改变信号与槽(即在信号那里添加自定义的clicked()信号,槽那里添加OnClick() )
mianwindow.cpp
(此处我实现的是点击自定义的QLable,然后显示hello)
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->label,SIGNAL(clicked),this,SLOT(on_label_clicked())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_label_clicked() { ui->label->setText("hello"); }
完成