Qt-控件重写
雙擊LineEdit控件執(zhí)行一個事件。我們LineEdit正常是單擊光標懸浮的這種狀態(tài),所以我需要對這個控件進行重寫。
因為是要重寫,所以我們需要自定義QLineEdit。
Qt 控件重寫
/*MyLineEdit.h*/
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QWidget>
#include <QLineEdit>
?
class MyLineEdit : public QLineEdit
{
?? ?Q_OBJECT
public:
?? ?explicit MyLineEdit(QWidget *parent = 0);
?? ?~MyLineEdit();
protected:
?? ?void mouseDoubleClickEvent(QMouseEvent *event);
};
#endif?? ?// MYLINEEDIT_H
把你要讓這個控件執(zhí)行的事件放到你重寫的這個類中,并實現它。
/*MyLineEdit.cpp*/
#include "mylineedit.h"
#include <QDebug>
#include <QLineEdit>
MyLineEdit::MyLineEdit(QWidget *parent) :
? ? QLineEdit(parent)
{
}
MyLineEdit::~MyLineEdit()
{
}
void MyLineEdit::mouseDoubleClickEvent(QMouseEvent *event)
{
? ? qDebug()<<"hi~我在執(zhí)行QLineEdit雙擊事件~";
}
做完這步就相當于重寫完成了,接下來就是需要使用這個自定義的類。
/*from.h*/
#ifndef FORM_H
#define FORM_H
#include <QWidget>
namespace Ui {
class Form;
}
class Form : public QWidget
{
? ? Q_OBJECT
public:
? ? explicit Form(QWidget *parent = 0);
? ? ~Form();
private:
? ? Ui::Form *ui;
};
#endif // FORM_H
form.cpp
#include "form.h"
#include "ui_form.h"
#include "mylineedit.h"
Form::Form(QWidget *parent) :
? ? QWidget(parent),
? ? ui(new Ui::Form)
{
? ? ui->setupUi(this);
? ? MyLineEdit* a = new MyLineEdit(this);
? ? ui->verticalLayout->addWidget(a);
}
Form::~Form()
{
? ? delete ui;
}
/*********************重寫QLineEdit的focusInEvent()和focusOutEvent()函數:
源碼如下:
// MYLINEEDIT_H
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
class MyLineEdit : public QLineEdit
{
? ? ? ? Q_OBJECT
?public:
? ? ? ?MyLineEdit(QWidget *parent=0);
? ? ? ?~MyLineEdit();
?protected:
? ? ? ?virtual void focusInEvent(QFocusEvent *e);
? ? ? ?virtual void focusOutEvent(QFocusEvent *e);
};
#endif // MYLINEEDIT_H
`
//myLineEdit.cpp
#include "myLineEdit.h"
MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
{
}
MyLineEdit::~MyLineEdit()
{
}
void MyLineEdit::focusInEvent(QFocusEvent *e)
{
? ? ? ?QPalette p=QPalette();
? ? ? ?p.setColor(QPalette::Base,Qt::green); ? ?//QPalette::Base 對可編輯輸入框有效,還有其他類型,具體的查看文檔
? ? ? ?setPalette(p);
}
void MyLineEdit::focusOutEvent(QFocusEvent *e)
{
? ? ? ?QPalette p1=QPalette();
? ? ? ?p1.setColor(QPalette::Base,Qt::white);
? ? ? ?setPalette(p1);
}
`
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "MyLineEdit.h"
#include <QGridLayout>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
? ? ? ? ? ? ? ?QWidget(parent),
? ? ? ? ? ? ? ?ui(new Ui::Widget)
{
? ? ? ?ui->setupUi(this);
? ? ? ?init();
}
Widget::~Widget()
{
? ? ? ?delete ui;
}
void Widget::init()
{
? ? ? ?lineEdit1=new MyLineEdit(this);
? ? ? ?lineEdit2=new MyLineEdit(this);
? ? ? ?gridLayout=new QGridLayout;
? ? ? ?gridLayout->addWidget(lineEdit1,0,0);
? ? ? ?gridLayout->addWidget(lineEdit2,1,0);
? ? ? ?setLayout(gridLayout);
}
?
總結
- 上一篇: 使用 idea 创建第一个 spring
- 下一篇: springCloud - 第8篇 -