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灯在闪烁。