Qt フレームワークのイベントに反応するために、Qt クラス (QLabel)、つまり単一の引数を持つデフォルト コンストラクターを再実装しました。エラーが発生したため、追加の引数を使用してコンストラクターを再実装しました。今では動作します。
クラス:
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent = 0);
explicit myLabel(QString x, QWidget *parent = 0);
void mousePressEvent( QMouseEvent* e );
signals:
void clicked();
};
コンストラクター:
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}
myLabel::myLabel(QString x, QWidget *parent) : QLabel(parent)
{
setText(x);
}
私の(初心者の)質問は次のとおりです。[基本クラスの他のすべてのメソッドと同様に、基本クラスのそれぞれのコンストラクターが実行されないのはなぜですか(たとえば、再実装せずに setText() を使用できます)]? そして極端な例: コンストラクターにはコードが含まれていないのに、なぜコンストラクターを再実装する必要があるのでしょうか?
編集:投稿する前に、何を検索すればよいかわかりませんでしたが、この質問は基本的にhttps://stackoverflow.com/a/347362/1619432で回答されています
編集: bartimar が指摘したように、コンストラクターは基本クラスのコンストラクターを呼び出すという点で空ではありません。これは明らかに、次のようにそれぞれのパラメーターを渡すことで実行できます。
myLabel::myLabel( const QString& x, QWidget* parent, Qt::WindowFlags f ) :
QLabel( x, parent, f ) {}