|  |  |  | @ -1,42 +1,47 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include "pushbuttontype.h" | 
			
		
	
		
			
				
					|  |  |  |  | #include <QEvent> | 
			
		
	
		
			
				
					|  |  |  |  | #include "pushbuttontype.h"// 包含PushButtonType类的头文件 | 
			
		
	
		
			
				
					|  |  |  |  | #include <QEvent>// 包含QEvent类的头文件,QEvent是Qt中用于表示事件的类 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | PushButtonType::PushButtonType(QWidget *parent) : QPushButton(parent) { } | 
			
		
	
		
			
				
					|  |  |  |  | PushButtonType::PushButtonType(QWidget *parent)// PushButtonType类的构造函数
 | 
			
		
	
		
			
				
					|  |  |  |  |     : QPushButton(parent){} | 
			
		
	
		
			
				
					|  |  |  |  |       // 调用QPushButton的构造函数,并传入父窗口指针
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | bool PushButtonType::event(QEvent *event) | 
			
		
	
		
			
				
					|  |  |  |  | bool PushButtonType::event(QEvent *event)// 重载event函数
 | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     if (event->type() == QEvent::MouseButtonPress) { | 
			
		
	
		
			
				
					|  |  |  |  |         setIcon(pressedIcon); | 
			
		
	
		
			
				
					|  |  |  |  |     if (event->type() == QEvent::MouseButtonPress) {// 如果事件类型是鼠标按下
 | 
			
		
	
		
			
				
					|  |  |  |  |         setIcon(pressedIcon);// 设置按钮图标为按下状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     if (event->type() == QEvent::MouseButtonRelease) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (underMouse()) { | 
			
		
	
		
			
				
					|  |  |  |  |             setIcon(hoveredIcon); | 
			
		
	
		
			
				
					|  |  |  |  |     if (event->type() == QEvent::MouseButtonRelease) {// 如果事件类型是鼠标释放
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (underMouse()) { // 如果鼠标在按钮范围内
 | 
			
		
	
		
			
				
					|  |  |  |  |             setIcon(hoveredIcon);// 设置按钮图标为鼠标悬停状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |  |             setIcon(normalIcon); | 
			
		
	
		
			
				
					|  |  |  |  |             setIcon(normalIcon); // 设置按钮图标为正常状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     // 如果事件类型是鼠标进入
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (event->type() == QEvent::Enter) { | 
			
		
	
		
			
				
					|  |  |  |  |         setIcon(hoveredIcon); | 
			
		
	
		
			
				
					|  |  |  |  |         setIcon(hoveredIcon); // 设置按钮图标为鼠标悬停状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 如果事件类型是鼠标离开
 | 
			
		
	
		
			
				
					|  |  |  |  |     // 设置按钮图标为正常状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (event->type() == QEvent::Leave) { | 
			
		
	
		
			
				
					|  |  |  |  |         setIcon(normalIcon); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     // 调用QPushButton的event函数,继续处理其他事件
 | 
			
		
	
		
			
				
					|  |  |  |  |     return QPushButton::event(event); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // 设置按钮在按下状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  | void PushButtonType::setPressedIcon(const QIcon &newPressedIcon) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     pressedIcon = newPressedIcon; | 
			
		
	
		
			
				
					|  |  |  |  |     pressedIcon = newPressedIcon;// 更新按下状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // 设置按钮在鼠标悬停状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  | void PushButtonType::setHoveredIcon(const QIcon &newHoveredIcon) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     hoveredIcon = newHoveredIcon; | 
			
		
	
		
			
				
					|  |  |  |  |     hoveredIcon = newHoveredIcon;// 更新鼠标悬停状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // 设置按钮在正常状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  | void PushButtonType::setNormalIcon(const QIcon &newNormalIcon) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     normalIcon = newNormalIcon; | 
			
		
	
		
			
				
					|  |  |  |  |     setIcon(newNormalIcon); | 
			
		
	
		
			
				
					|  |  |  |  |     normalIcon = newNormalIcon; // 更新正常状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  |     setIcon(newNormalIcon); // 并将按钮图标设置为正常状态下的图标
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |