那有可能构建一个特定的定制 QPushButton 吗?

Posted

技术标签:

【中文标题】那有可能构建一个特定的定制 QPushButton 吗?【英文标题】:Would that be possible to build a particular customized QPushButton? 【发布时间】:2021-01-31 00:33:46 【问题描述】:

我试图了解是否有办法构建特定的自定义QPushButton

我想要实现的是以下布局和外观:

按钮如下图所示,注意红线(表示按钮没有被点击)。我不确定如何达到红线。我想可能是widget?或QProgressbar,当被点击时会变成/加载到绿色..我不确定,因为我没有足够的经验并且一直在尝试构建它。但是,这似乎有点困难:

点击发生后它的外观如下(注意绿线):

尽管我很努力,但我还是找到了一些有用的资源来帮助我开始:例如this source 非常适合了解如何开始。我研究了一个事实,为了实现这一点,按钮需要被子类化,这很好,因为它奠定了某种路线。 在我使用的代码下方:

custombutton.h

#ifndef CUSTOMBUTTON_H
#define CUSTOMBUTTON_H

#include <QPushButton>

class CustomButton : public QPushButton

public:
    CustomButton( const QString& text, QWidget* parent = 0 );
    void writeText();
;

#endif // CUSTOMBUTTON_H

custombutton.cpp

#include "CustomButton.h"
#include "algorithm"

CustomButton::CustomButton( const QString& text, QWidget* parent )
    : QPushButton( text, parent )




void CustomButton::writeText()

    QString buttonText = text();
    setText( buttonText );

主要

#include <QApplication>
#include "CustomButton.h"
int main(int argc, char *argv[])

    QApplication a(argc, argv);
    CustomButton w( "MyButton" );
    w.show();
    w.writeText();
    a.exec();
    return 0;

我发现的另一个有用的来源是this one,它也很有用。

official documentation 指向使用样式,但我尽量不这样做,因为我想解决问题,了解使用 Qt 进行子类化的潜力是什么。 除非朝着风格方向发展是解决这个问题的唯一可能方法? 我要提前感谢任何人分享或指出如何做到这一点的潜在解决方案。

【问题讨论】:

你必须重新实现paintEvent()并自己绘制按钮。 感谢阅读!我会尽力做到最好,如果找到解决方案,我会发布。 【参考方案1】:

您可以将按钮设置为可检查,然后为这两种状态设置不同的图标。 在您的情况下,您必须为正常模式设置红色图标,为选定模式设置绿色图标

这是一个例子:https://www.dropbox.com/s/x40byuyu2ph8m1y/CheckableButton.zip?dl=0 这里有人问了同样的问题:https://forum.qt.io/topic/72363/change-icon-of-pushbutton 在这里您可以了解这些模式:https://doc.qt.io/qt-5/qicon.html#Mode-enum

PS:当然,覆盖 QAbstractButton::paintEvent(QPaintEvent *event) 也是一个可行的选择

【讨论】:

以上是关于那有可能构建一个特定的定制 QPushButton 吗?的主要内容,如果未能解决你的问题,请参考以下文章

定制化成企业IT构建必经路

新一代构建工具gradle学习

如何设计一个通用的业务实体并且仍然是 OO?

Maven学习-Profile详解

Gradle讲解

针对特定 API 级别的自定义 Android/Flutter 版本