那有可能构建一个特定的定制 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章