从QPushbutton继承的类不显示文本

时间:2015-05-06 07:49:29

标签: c++ qt

我尝试使用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);
}

2 个答案:

答案 0 :(得分:2)

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

在构造函数中执行类似的操作:

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

您应该阅读有关继承如何工作的更多信息。在派生类中,您可以访问基类的所有受保护和公共成员,因此setText(QString::number(valuer));也可以使用。但是,在一般情况下,您可以从派生类的初始化列表(冒号后)调用基类构造函数,并传递所需的参数。

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

答案 1 :(得分:0)

所以,我都是继承并创建了一个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可能更优雅,但我可能会这样做。

谢谢大家的答案!