2017-02-08 14 views
0

親ウィジェットのいくつかの属性を取得しようとしています。子:InstrumentSelectorです。子からQtWidget親メソッドを呼び出す

InstrumentSelectorコンストラクタから、parent->metaObject()->className()を実行すると、正しい名前(SamplerModule)が得られます。だから私は私の公式メソッドの一つ、例えばgetT()を私のSamplerModuleヘッダーとcppファイルのパブリックメソッドとして定義するといいでしょう。

しかし、私はこの関数を呼び出すときに、私はこのエラーを取得しています:

\app\widgets\instrumentselector.cpp:23: erreur : 'class QWidget' has no member named 'getT' msgBox.setText(parent->getT());

は、だから私はそれがC++とQtの基本だと思うが、私はまだそれを学んでいます。

誰かがアイデアを持っていますか?

コードを見ずに感謝

答えて

1

を、それは確かに言うのは難しいですが、私の推測では、あなたが「QWidgetの*」と「親」を定義したということなので、コンパイラはそれが実際だという考えを持っていませんSamplerModuleへの基本ポインタ。あなたは、SamplerModuleポインタに "親"をキャストするか、それを始めるためにそのように宣言する必要があります。そしてはい、これは純粋なC++です。それはQtとは関係ありません。

+0

ありがとうございます!だから私のコードはかなり長いですが、私はそれを短くしようとします。 Selectorのシグネチャは 'InstrumentSelector :: InstrumentSelector(QWidget * parent):QPushButton(parent)'です。私は 'SamplerModule'UIファイルに36個のボタンを持っています。そして私は 'parent-> getT()を私のボタンコンストラクタで実行しようとしています。だから、私は 'InstrumentSelector'インスタンスにもっと情報を与えなければならないと思っていますが、どうやってそれを行うのか本当に分かりません。 :/ –

+1

あなたが必要なのは次のとおりです: "SamplerModule * module = dynamic_cast (parent);" "module-> getT()"を使います。親が実際にSamplerModuleでない場合、動的キャストは失敗し、nullポインタを返します。また、基本クラスと派生クラスを読み込み、それぞれにポインタを使用する方法もあります。これは重要な概念であり、それをよく理解していなければ、あなたは非常に不満に思うでしょう。 :) – goug

+0

ありがとうございました!しかしその場合、 'module'は' SamplerModule'の "新しいインスタンス"になりますか? 'InstrumentSelector'が作成された場所ではありませんか?だから、もしこのようなことができないなら、この特定のインスタンスの 'SamplerModule'に値を設定する必要があるのですか? –

関連する問題