Qt实现按钮的三态变换,纯代码设计

    技术2025-04-16  10

    准备工作

    重写Button类

    1、新建一个Button.h头文件,在其中重写一个Button类,并且重载enterEvent和leaveEvent函数。代码如下

    //重写按钮类Button #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 // BUTTON_H

    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; //定义一个Dialog对象 private: //QPushButton *btn; //QPushButton *btn1; //Button *btn; QPushButton *btn; //定义一个Button对象 void iniUI(); //UI的创建和初始化 void iniSignalSlots(); //初始化信号与槽的连接 private slots: void func(); //设置鼠标点击槽函数 }; #endif // MYBUTTON_H

    MyButton.cpp

    #include "mybutton.h" #include <dialog.h> #include <button.h> MyButton::MyButton(QWidget *parent) : QDialog(parent) //构造函数实现界面的设计和信号与槽函数的连接 { iniUI(); //界面创建与布局 iniSignalSlots();//信号与槽的关联 this->setWindowTitle("MyButton"); //设置窗口名 } MyButton::~MyButton() { } //iniUI()实现界面组件的创建与布局 void MyButton::iniUI() { this->resize(600,400); btn = new Button(this); //创建一个Button组件 btn->move(250,150); //设置按键的摆放位置 btn->setText("按键"); //按键命名 btn->setStyleSheet("background-color:rgb(255,255,255)"); } //iniSignalSlot()进行信号与槽的关联 void MyButton::iniSignalSlots() { connect(btn,SIGNAL(clicked()),this,SLOT(func())); //按钮信号与槽函数关联 } //鼠标点击槽函数设计 void MyButton::func() { new_dialog =new Dialog(); //新建一个窗口对象 //modal属性决定了show()弹出的窗口是模态还是非模态 new_dialog->setModal(false); //默认情况下该属性为false并且show()弹出的窗口是非模态的 new_dialog->show(); //显示对话窗口 }

    然后运行就实现了按钮的自定义效果。

    Processed: 0.010, SQL: 9