日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt-控件重写

發(fā)布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);
}
?

總結

以上是生活随笔為你收集整理的Qt-控件重写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。