QT/MFC按鈕雙擊事件(自定義控件類/類的提升)

QT/MFC中對很多控件進行了封裝,常用的消息/事件也都可以很方便地添加,但是有些控件類的消息或者屬性,QT/MFC都默認沒有提供重寫方法,這時就只能定義某個控件的子類,並重寫其響應消息/事件/屬性,比如我們想定義一個按鈕的雙擊事件,可以按照以下步驟執行:
定義一個按鈕子類→重寫按鈕子類窗口的雙擊事件→在主窗口中使用此按鈕子類;

(1) 定義一個按鈕子類
在項目中添加一個QT類,因爲不需要新的UI文件,這裏選擇Qt Class:

這裏基類默認只有兩種,我們選擇QWidget,等文件創建成功再把基類改成QPushButton:

(2) 重寫按鈕子類窗口的雙擊事件
.h文件

#pragma once
#include <QWidget>
#include <QPushButton>
#include <QMouseEvent>

class MyButton : public QPushButton /*父類改成QPushButton*/
{
	Q_OBJECT

public:
	MyButton(QWidget *parent);
	~MyButton();

protected:
	void mouseDoubleClickEvent(QMouseEvent *ev); /*雙擊事件響應函數*/
};

.cpp文件

#include "MyButton.h"
#include <QMessageBox>
#include <QString>

MyButton::MyButton(QWidget *parent)
	: QPushButton(parent)
{
	this->setParent(parent);
	this->setText(QString::fromLocal8Bit("我是自定義按鈕"));
	this->setFixedSize(QSize(100, 50));
}

MyButton::~MyButton()
{
}

void MyButton::mouseDoubleClickEvent(QMouseEvent * ev)
{
	if (ev->buttons() == Qt::LeftButton)
	{
		QMessageBox::information(NULL, "666", "double click", QMessageBox::Yes);
	}
}

(3)在主窗口中使用此按鈕子類
在這裏插入圖片描述

運行結果如下,搞定!
在這裏插入圖片描述

/萬能的分割線*/

順帶一提,QT的UI文件中有個類提升功能,可以很簡單的把某個控件基類提升爲我們的自定義控件類,而且省去一些設置的代碼,步驟如下;

如圖所示,在控件設置中選擇"提升爲…"

將自定義類添加到可提升列表,然後再點擊提升:

有時候提升完畢,編譯時會報錯,如圖,這是因爲系統在ui頭文件中添加自定義類頭文件時把它當成了系統頭文件,把包含方式改成自定義類就行了:

可以看到按鈕提升爲自定義控件類了,效果跟之前是一樣的:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章