QT从入门到实战完整版 P30 P31

自定义封装控件

smallWidgt.h

#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H

#include <QWidget>

namespace Ui {
class SmallWidget;
}

class SmallWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SmallWidget(QWidget *parent = nullptr);
    ~SmallWidget();
    //设置数字
    void setNum(int num);

    //获取数字
    int getNum();

private:
    Ui::SmallWidget *ui;
};

#endif // SMALLWIDGET_H

smallWidget.cpp

#include "smallwidget.h"
#include "ui_smallwidget.h"

SmallWidget::SmallWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SmallWidget)
{
    ui->setupUi(this);
    //
    void(QSpinBox:: * spSignal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);
    //QSlider移动 QStringBox跟着移动
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);

}
//设置数字
void SmallWidget::setNum(int num)
{
    ui->spinBox->setValue(num);
}
//获取数字
int SmallWidget::getNum()
{
    return ui->spinBox->value();
}
SmallWidget::~SmallWidget()
{
    delete ui;
}

Widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //点击获取,获取当前控件的值
    connect(ui->pushButtonget,&QPushButton::clicked,[=](){
        qDebug()<<ui->widget_2->getNum();
    });
    //设置到一半
    connect(ui->pushButtonset,&QPushButton::clicked,[=](){
        ui->widget_2->setNum(50);
    });
}

Widget::~Widget()
{
    delete ui;
}

QT中的鼠标事件

mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
#include <QWidget>

class myLabel : public QLabel
{
    Q_OBJECT
public:
    explicit myLabel(QWidget *parent = nullptr);

    //鼠标进入事件
    void enterEvent(QEnterEvent *event);
    //鼠标离开事件
    void leaveEvent(QEvent *ev);

    //鼠标按下
    virtual void mousePressEvent(QMouseEvent *ev);
    //鼠标释放
    virtual void mouseReleaseEvent(QMouseEvent *ev);
    //鼠标移动
    virtual void mouseMoveEvent(QMouseEvent *ev);
signals:

};

#endif // MYLABEL_H

mylabel.cpp

#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>

myLabel::myLabel(QWidget *parent)
    : QLabel{parent}
{
    //设置鼠标追踪状态
    setMouseTracking(true);
}
//鼠标进入事件
void myLabel::enterEvent(QEnterEvent *event)
{
    //qDebug()<<"鼠标进入了";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent *)
{
    //qDebug()<<"鼠标离开了";
}
//鼠标按下
void myLabel::mousePressEvent(QMouseEvent *ev)
{
    //当鼠标左键按下 提示信息
    //if(ev->button()==Qt::LeftButton)
    //{
        QString str=QString("鼠标按下了x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug()<<str;
    //}
}
//鼠标释放
void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    //当鼠标左键按下 提示信息
    //if(ev->button()==Qt::LeftButton)
    //{
    QString str=QString("鼠标释放了x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
    qDebug()<<str;
    //}
}
//鼠标移动
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{
    //当鼠标左键按下 提示信息
    //if(ev->buttons() & Qt::LeftButton)
    //{
    QString str=QString("鼠标移动了x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
    qDebug()<<str;
    //}
}
posted @ 2023-07-19 17:37  Vijurria  阅读(14)  评论(0编辑  收藏  举报