DSP

Qt4设计自定义LED灯控件(提升法)

2019-07-13 16:05发布

1.创建QtGui工程 2.设计自定义控件(设计控件外形,行为)
myled.h
#ifndef MYLED_H
#define MYLED_H

#include 

class MyLed : public QWidget
{
    Q_OBJECT
public:
    explicit MyLed(QWidget *parent = 0);
    void display( bool key);//设置LED灯状态

protected:
    void paintEvent( QPaintEvent *event );//绘制自己的控件

private:
    bool state;//LED灯的状态
    
};

#endif // MYLED_H
myled.cpp
#include "myled.h"
#include 
#include 

MyLed::MyLed(QWidget *parent) :
    QWidget(parent)
{
    state = false;
}

void MyLed::display(bool key)
{
    state = key;
    repaint();
}

void MyLed::paintEvent(QPaintEvent *event)
{
    QPainter paint(this);
    if (event->rect().intersects(contentsRect())) {
        paint.setClipRegion(event->region().intersect(contentsRect()));

        QRect r = contentsRect();
        int size = qMin(r.width(), r.height());
        QPoint center( size / 2, size / 2 );

        if(state)
        {
            paint.setBrush(QBrush(Qt::red,Qt::SolidPattern));
        }
        else
        {
            paint.setBrush(QBrush(Qt::darkRed,Qt::SolidPattern));
        }
        paint.drawEllipse(center,size/2,size/2);

    }
}
3. 在ui文件中添加一个已有的控件,如Qwidget,右键选择提升为,然后关联自定义控件

点击提升。
4.这时候运行程序就能看到自定义的控件。


5.在其父控件中添加控制行为。比如用QTimer定时器实现LED灯一秒一闪。
dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include "ui_dialog.h"

class Dialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit Dialog(QWidget *parent = 0);
private slots:
    void switchKey();
private:
    Ui::Dialog ui;
    bool key;
};

#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include 

Dialog::Dialog(QWidget *parent) :
    QDialog(parent)
{
    ui.setupUi(this);
    key = false;
    QTimer *t = new QTimer(this);
    connect(t,SIGNAL(timeout()),this,SLOT(switchKey()));
    t->start(1000);
}

void Dialog::switchKey()
{
    if(key)
    {
        key = false;
    }
    else
    {
        key = true;
    }
    ui.widget->display(key);
}
6. 运行程序,可以看到LED灯在闪烁。