Qt自定义控件(三)

来源:互联网 发布:程序员属于什么行业 编辑:程序博客网 时间:2024/06/05 06:25

一,绑定控件的使用

使用的槽函数的使用

#include "signalwegit.h"#include "ui_signalwegit.h"SignalWegit::SignalWegit(QWidget *parent) :    QWidget(parent),    ui(new Ui::SignalWegit){    ui->setupUi(this);    //数字改变滑动    connect(ui->spinBox, SIGNAL(valueChanged(int)),            ui->slider, SLOT(setValue(int)));    //滑动改变数字    connect(ui->slider, SIGNAL(valueChanged(int)),            ui->spinBox, SLOT(setValue(int)));}SignalWegit::~SignalWegit(){    delete ui;}

二,事件的处理机制

QEvent 中

#ifndef MYBUTTON_H#define MYBUTTON_H#include <QPushButton>class MyButton : public QPushButton{    Q_OBJECTpublic:    explicit MyButton(QWidget *parent = 0);    bool event(QEvent *event);signals:public slots:};#endif // MYBUTTON_H

cpp

#include "mybutton.h"#include <QEvent>#include <QMouseEvent>#include <QDebug>#include <QWidget>//要继承QPushButton类MyButton::MyButton(QWidget *parent) : QPushButton(parent){}bool MyButton::event(QEvent *event){    //mouse 的event事件的处理    if (event->type() ==QEvent::MouseButtonPress)    {        QMouseEvent * mouseev = static_cast<QMouseEvent*>(event);        //判断是那个键        if (mouseev->button() == Qt::LeftButton)        {            return true;        }        //mid中 键        if (mouseev->button() == Qt::MidButton)        {            qDebug() << "mid Button";        }        //right中 键        if (mouseev->button() == Qt::RightButton)        {            qDebug() << "right Button";        }    }    //父类处理    return QPushButton::event(event);}

mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();    bool eventFilter(QObject *watched, QEvent *event);private:    Ui::MainWindow *ui;};#endif // MAINWINDOW_H

cpp

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QEvent>#include <QMouseEvent>#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    ui->myBtn->installEventFilter(this);}MainWindow::~MainWindow(){    delete ui;}bool MainWindow::eventFilter(QObject *watched, QEvent *event){    //判断产生事件的窗口是不是mybutton    if (watched == ui->myBtn)    {        if (event->type() == QEvent::MouseButtonPress)        {            QMouseEvent* mouseEv = static_cast<QMouseEvent*>(event);            if (mouseEv->button() == Qt::RightButton)            {                QMessageBox::information(this, "info", "songlI");                return true;            }        }    }    return QMainWindow::eventFilter(watched, event);}