从qpushbutton继承的类别没有文字

Class inherited from QPushbutton shows no text

本文关键字:文字 qpushbutton 继承      更新时间:2023-10-16

我正在尝试使用qt(简单计算器)创建第一个项目。我创建了一个从qpushbutton继承的类,无警告地编译代码,但是创建的按钮似乎为空。我不明白为什么它没有显示42 ...

这是代码:

main.cpp:

#include "bouton_chiffre.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    bouton_chiffre w(42, 0);
    w.show();
    return a.exec();
}

bouton_chiffre.h:

#ifndef BOUTON_CHIFFRE_H
#define BOUTON_CHIFFRE_H
#include <QObject>
#include <QWidget>
#include <QPushButton>
class bouton_chiffre : public QPushButton
{
    Q_OBJECT
public:
    bouton_chiffre(int, QWidget*);
private:
    int valeur_du_bouton;
    QPushButton *le_bouton;
};
#endif // BOUTON_CHIFFRE_H

bouton_chiffre.cpp:

#include "bouton_chiffre.h"
bouton_chiffre::bouton_chiffre(int valeur_init, QWidget *parent)
{
    valeur_du_bouton = valeur_init;
    le_bouton = new QPushButton(QString::number(valeur_init), parent);
}

您没有设置父按钮类的文本,而是在le_bouton中创建此类的新实例。

在构造函数中做类似的事情:

bouton_chiffre::bouton_chiffre(int valeur, QWidget *parent)
  : QPushButton(QString::number(valeur), parent)
{ 
  /*...*/
}

您应该阅读有关继承方式的更多信息。在派生的类中,您可以访问基础类的所有受保护和公共成员,因此setText(QString::number(valuer));也可以使用。但是,在通常的情况下,您可以从派生类的初始化列表(结肠之后)调用基类构造函数,并通过所需的参数。

创建具有基类类型的派生类的成员与继承有关。这只是一个不同的对象。

所以,我既从继承和创建qpushbutton,当然不能很好地工作...我修改了boutonchiffre.cpp,如下所示,它正如我现在所期望的:

#include "bouton_chiffre.h"
bouton_chiffre::bouton_chiffre(int valeur_init, QWidget *parent) : QPushButton(parent)
{
    valeur_du_bouton = valeur_init;
    setText(QString::number(valeur_init));
}

直接使用qpushbutton构造函数而不是setText更优雅,我可能会做到这一点。

谢谢大家的回答!