Qt类 | QPushButton类详解

QAbstractButton类详解:https://liujie.blog.csdn.net/article/details/140490511

一、QPushButton介绍

  QPushButton是任何图形用户界面中最常用的控件。按下(点击)按钮来命令计算机执行某个操作。典型的按钮有“确定”、“应用”、“取消”、“关闭”、“是”、“否”和“帮助”。按钮显示文本标签,可以通过在文本中用和号(&)前缀来指定快捷键;还可以选择性地显示一个小图标。

按钮中重要的模式或状态包括

  • 可用或不可用(变灰,禁用)。
  • 标准按钮、菜单按钮。
  • 默认或正常。对话框中的默认按钮通常可以使用 Enter 或 Return 键“点击”。
  • 是否自动重复。
  • 是否按下。

  按钮的一个变体是菜单按钮。这些不仅提供一条命令,还提供多个命令,因为当它们被点击时,它们会弹出一个选项菜单。使用 setMenu() 方法将弹出菜单与按钮关联。

按钮的使用方式

Header:
#include <QPushButton> 
qmake:
QT += widgets

二、Properties(属性)

  • autoDefault : bool – 按钮是否是自动默认按钮

    • 属性说明:

      这个属性用于控制按钮是否是自动默认按钮。设置为 true 时,按钮将被识别为自动默认按钮。在某些 GUI 风格中,默认按钮会绘制一个额外的边框,宽度可达 3 像素或更多。

      如果按钮有一个 QDialog 父对象,则这个属性的默认值是 true;否则默认为 false。

    • 访问函数:

      bool autoDefault() const  //获取当前的自动默认状态
      void setAutoDefault(bool) //设置自动默认状态
      
    • 注意事项:

      default 属性和 autoDefault 属性之间存在交互关系

  • default : bool – 按钮是否是默认按钮

    • 属性说明:

      这个属性用于决定按钮是否是默认按钮。

      默认按钮和自动默认按钮决定了当用户在对话框中按下回车键时会发生什么。如果设置了 default 属性为 true,则该按钮将成为对话框中的默认按钮,通常在用户按下回车时自动被激活。

    • 访问函数:

      bool isDefault() const //检查按钮是否是默认按钮
      void setDefault(bool)  //设置按钮是否为默认按钮
      
    • 注意事项:

      • 存在一个例外情况:如果当前有焦点的按钮是自动默认按钮,那么即使 default 属性为 true 的按钮存在,也会优先激活有焦点的自动默认按钮。
      • 默认按钮的行为是对话框特有的,但所有按钮都可以通过空格键在获得焦点时从键盘上被激活。
      • 在对话框中,一次只能有一个按钮是默认按钮。这个按钮会显示一个额外的边框(取决于 GUI 风格)
  • flat : bool – 按钮边框是否凸起

    • 属性说明:

      这个属性用于控制按钮边框是否凸起。

      • flat 属性为 false(默认值),按钮通常会有一个凸起的边框,这是大多数按钮的常见样式。
      • flat 属性设置为 true,按钮的边框将不会显示为凸起,这可以使按钮看起来更平滑或更现代。在这种状态下,如果按钮没有被按下,大多数GUI风格可能不会绘制按钮的背景。
      • 如果希望扁平按钮在未被按下时也有背景填充,可以使用 setAutoFillBackground(true),这样按钮的背景将使用 QPalette::Button 画笔进行填充。
    • 访问函数:

      bool isFlat() const //检查按钮是否设置为扁平(无边框凸起)
      void setFlat(bool)  //设置按钮是否应该是扁平的,即没有边框凸起
      

三、Public Functions(公共函数)

1.构造函数–构造按钮对象

QPushButton::QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)
  • 函数说明:

    这是 QPushButton 的构造函数之一,允许同时指定按钮的图标和文本

  • 参数说明:

    • icon: 参数接受一个 QIcon 对象,表示按钮上显示的图标。
    • text: 参数接受一个 QString 对象,表示按钮上的文本。
    • parent: 参数指定按钮的父控件,如果提供 nullptr,则按钮没有父控件。
  • 示例:

    // 使用QIcon和QString创建按钮
    QPushButton *buttonWithIconAndText = new QPushButton(QIcon("path/to/icon.png"), "Button with Icon and Text");
    
    // 使用QPixmap作为图标创建按钮
    QPixmap pixmap("path/to/pixmap.png");
    QPushButton *buttonWithPixmap = new QPushButton(QIcon(pixmap), "Button with QPixmap");
    
  • 注意事项:

    • C++的隐式类型转换允许将 QPixmap 对象直接传递给需要 QIcon 参数的函数,这意味着可以直接使用 QPixmap 作为按钮的图标。
QPushButton::QPushButton(const QString &text, QWidget *parent = nullptr)
  • 函数说明:

    这是 QPushButton 的构造函数之一,允许指定按钮的文本。

  • 示例:

    QPushButton *button = new QPushButton("Click Me", &window);
    button->setGeometry(50, 50, 100, 30);  // 设置按钮的位置和大小
    

2.autoDefault与setAutoDefault函数–获取/设置按钮的自动默认状态

  用来获取/设置autoDefault 属性值。

bool autoDefault() const  //获取当前的自动默认状态
void setAutoDefault(bool) //设置自动默认状态

示例:

QApplication app(argc, argv);

QDialog dialog;
dialog.setWindowTitle("Auto Default Button Example");

QPushButton *button1 = new QPushButton("Auto Default", &dialog);
button1->setAutoDefault(true);  // 设置为自动默认按钮

QPushButton *button2 = new QPushButton("Not Auto Default", &dialog);
button2->setAutoDefault(false);  // 不设置为自动默认按钮
button2->setGeometry(50, 50, 200, 50);
dialog.resize(300, 100);
dialog.show();

image-20240716220537935

当用户在对话框中按下回车键时,如果第一个按钮(“Auto Default”)有焦点,则会自动被激活。如果没有按钮有焦点,则会激活下一个自动默认按钮。第二个按钮(“Not Auto Default”)不会自动被激活,除非用户直接点击它。

3.isDefault与setDefault函数-- 获取/设置按钮的默认状态

  用来获取/设置default 属性值。

bool isDefault() const //检查按钮是否是默认按钮
void setDefault(bool)  //设置按钮是否为默认按钮

示例:

QDialog dialog;
dialog.setWindowTitle("Default Button Example");

QPushButton *defaultButton = new QPushButton("OK", &dialog);
defaultButton->setDefault(true);  // 设置为默认按钮

QPushButton *otherButton = new QPushButton("Cancel", &dialog);
// otherButton 不设置为默认按钮
otherButton->setGeometry(50, 50, 100, 50);

dialog.resize(300, 100);
dialog.show();

image-20240716221055068

当用户在对话框中按下回车键时,“OK” 按钮将自动被激活,因为它被设置为默认按钮。如果 “OK” 按钮没有焦点,并且对话框中有其他自动默认按钮,那么有焦点的自动默认按钮将被激活。

4.isFlat与setFlat函数–获取/设置按钮边框是否凸起

  用来获取/设置flat 属性值。

bool isFlat() const //检查按钮是否设置为扁平(无边框凸起)
void setFlat(bool)  //设置按钮是否应该是扁平的,即没有边框凸起

示例:

// 创建一个按钮,并设置为扁平样式
QPushButton *button = new QPushButton("Flat Button");
button->setFlat(true); // 设置按钮为扁平样式

// 确保即使按钮扁平,背景也被填充
button->setAutoFillBackground(true);

image-20240716221435751

5.menu与setMenu函数–获取/设置与按钮关联的弹出菜单(菜单按钮)

QMenu *QPushButton::menu() const
  • 函数说明:

    用于获取与按钮关联的弹出菜单(QMenu 对象)的指针。弹出菜单通常用于创建下拉菜单或右键菜单,提供按钮的附加选项或操作。如果按钮设置了弹出菜单,此函数返回该菜单的指针;如果尚未设置弹出菜单,函数返回 nullptr

void QPushButton::setMenu(QMenu *menu)
  • 函数说明:

    允许将一个 QMenu 对象与按钮关联。当一个按钮与菜单关联后,点击按钮会显示这个菜单,这样的按钮通常称为菜单按钮。

  • 示例:

    QPushButton *menuButton = new QPushButton("Options", &window);
    menuButton->setGeometry(50, 50, 100, 30);  // 设置按钮的位置和大小
    
    // 创建一个菜单并添加一些动作
    QMenu *menu = new QMenu(&window);
    menu->addAction("Open");
    menu->addAction("Save");
    menu->addSeparator();
    menu->addAction("Exit");
    
    // 将菜单与按钮关联
    menuButton->setMenu(menu);
    

    image-20240716222107698

  • 注意事项:

    • 通过 setMenu 关联菜单时,按钮不会接管菜单的所有权。这意味着 QMenu 对象的生命周期需要由其他地方管理,以确保在按钮使用期间菜单是有效的。

四、Reimplemented Public Functions(可重写的公共函数)

1.minimumSizeHint函数–获取按钮的最小尺寸

[override virtual] QSize QPushButton::minimumSizeHint() const
  • 函数说明:

    这个函数提供了控件的最小建议尺寸。重写 minimumSizeHint() 的目的是提供特定于按钮的最小尺寸

  • 示例:

    QPushButton button("Click Me");
    // 获取并打印按钮的最小尺寸提示
    QSize minSize = button.minimumSizeHint();
    qDebug() << "Minimum size hint:" << minSize.width() << "x" << minSize.height();
    //Minimum size hint: 93 x 28
    

2.sizeHint函数–获取按钮的推荐尺寸

[override virtual] QSize QPushButton::sizeHint() const
  • 函数说明:

    这个函数提供了控件的推荐尺寸。重写 sizeHint() 函数是 QPushButton 类的一个特性,允许它根据按钮的特定需求来调整推荐尺寸。

  • 示例:

    // 获取并打印按钮的推荐尺寸
    QSize sizeHint = button->sizeHint();
    qDebug() << "Button size hint:" << sizeHint.width() << "x" << sizeHint.height();
    //Button size hint: 93 x 28
    

五、Public Slots(公共槽函数)

1.showMenu函数–弹出菜单

[slot] void QPushButton::showMenu()
  • 函数说明:

    槽函数 showMenu() 用于显示与按钮关联的弹出菜单。在实际应用中,这通常会由用户的点击事件触发

六、Protected Functions(受保护的函数)

1.initStyleOption函数–用于初始化 QStyleOptionButton 结构体

[protected] void QPushButton::initStyleOption(QStyleOptionButton *option) const
  • 函数说明:

    • initStyleOption() 函数用于初始化 QStyleOptionButton 结构体。这个结构体包含了绘制按钮所需的所有信息,如按钮的尺寸、文本、图标、状态等。

    • 通过调用 initStyleOption(),子类可以快速获取一个填充了 QPushButton 相关信息的 QStyleOptionButton 实例,而无需手动设置每一个属性。

    • 在自定义按钮绘制时非常有用,开发者可以通过继承 QPushButton 并重写绘制函数(如 paintEvent()),来实现自定义的按钮外观。

    • QStyleOption::initFrom()允许从现有的控件初始化 QStyleOption 结构体。

  • 示例:

    class CustomButton : public QPushButton {
    protected:
        void paintEvent(QPaintEvent *event) override {
            QStyleOptionButton option;
            initStyleOption(&option);
    
            QPainter painter(this);
            // 自定义绘制逻辑
            painter.setPen(Qt::NoPen);
            painter.setBrush(Qt::red);
            painter.drawEllipse(option.rect);
    
            // 绘制文本
            painter.setPen(Qt::black);
            painter.drawText(option.rect, Qt::AlignCenter, option.text);
        }
    };
    

    上述是一个简单的自定义按钮。通过创建了一个继承自 QPushButtonCustomButton 类,并重写了 paintEvent() 函数。在 paintEvent() 中,我们调用 initStyleOption() 来初始化 QStyleOptionButton 结构体,并使用它来绘制一个红色的圆形按钮和文本。

七、Reimplemented Protected Functions(可重写的受保护的函数)

  下面这些函数一般用于自定义按钮时,大多数是事件函数,hitButton函数用于调整区域(给定的坐标点 pos 是否在按钮的内部区域)。

image-20240716214415036

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值