准备工作
重写Button类
1、新建一个Button.h头文件,在其中重写一个Button类,并且重载enterEvent和leaveEvent函数。代码如下
#ifndef BUTTON_H
#define BUTTON_H
#include <QPushButton>
#include <QEvent>
class Button : public QPushButton
{
Q_OBJECT
public:
Button(QWidget
*parent
= 0);
~Button();
public:
void enterEvent(QEvent
*);
void leaveEvent(QEvent
*);
};
#endif
2、在Button.cpp中重载两个函数,给出具体实现
采用setStyleSheet()来改变按钮外观
#include "button.h"
Button
::Button(QWidget
*parent
)
: QPushButton
(parent
)
{
}
Button
::~Button()
{
}
void Button
::enterEvent(QEvent
*)
{
setStyleSheet("QPushButton{background-color:rgb(67,142,219)}");
}
void Button
::leaveEvent(QEvent
*)
{
setStyleSheet("QPushButton{background-color:rgb(255,255,255)}");
}
添加一个对话框(Dialog),点击按钮时弹出
右击项目->add new->选择Qt,Qt设计师界面类。如图所示,添加成功后你就可以在ui界面中进行设计
开始编写
在做完上面的准备工作之后,就可以开始编写主要的功能代码了。我们主要在主窗口.h和主窗口.cpp文件中编写,我在创建项目的时候给我的主窗口命名为MyButton,所以我在MyButton.h和MyButton.cpp中编写。
MyButton.h
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QDialog>
#include <dialog.h>
#include <button.h>
#include <QPushButton>
class MyButton : public QDialog
{
Q_OBJECT
public:
MyButton(QWidget
*parent
= 0);
~MyButton();
Dialog
*new_dialog
;
private:
QPushButton
*btn
;
void iniUI();
void iniSignalSlots();
private slots
:
void func();
};
#endif
MyButton.cpp
#include "mybutton.h"
#include <dialog.h>
#include <button.h>
MyButton
::MyButton(QWidget
*parent
)
: QDialog(parent
)
{
iniUI();
iniSignalSlots();
this->setWindowTitle("MyButton");
}
MyButton
::~MyButton()
{
}
void MyButton
::iniUI()
{
this->resize(600,400);
btn
= new Button(this);
btn
->move(250,150);
btn
->setText("按键");
btn
->setStyleSheet("background-color:rgb(255,255,255)");
}
void MyButton
::iniSignalSlots()
{
connect(btn
,SIGNAL(clicked()),this,SLOT(func()));
}
void MyButton
::func()
{
new_dialog
=new Dialog();
new_dialog
->setModal(false);
new_dialog
->show();
}
然后运行就实现了按钮的自定义效果。