2016-12-08 9 views
0

私は、ユーザーがデータベース接続を選択できるウィザードページを持っています。データベース接続を表現するために、私はデータベース情報をラップするクラスを作成しました。選択したデータベース接続を外部からアクセス可能にするために、QWizardPageのフィールドメカニズムを使用したいが、それが動作するように動作していない。クラスプロパティのQWizardPage registerField()が機能しません

ヘッダー:

Q_PROPERTY(DBConnectionInfo connection READ getConnection NOTIFY connectionChanged) 

CPP:

qRegisterMetaType<DBConnectionInfo>(); 
registerField("connection*", this, "connection", SIGNAL(connectionChanged(DBConnectionInfo))); 
selected_connection = DBConnectionInfo("MyNewName", "MyServer", "MyDB", 3000, "MyUser", "MyPW"); 
emit connectionChanged(selected_connection); 

std::cout << "Value of name: \"" << field("connection").value<DBConnectionInfo>().getName().toStdString() << "\""; 
std::cout << "Value of property: \"" << property("connection").value<DBConnectionInfo>().getName().toStdString() << "\""; 

結果:

だから、プロパティが適切に設定されていますが、値はフィールド機構を介してアクセスすることはできません
Value of name: "" 
Value of property: "MyNewName" 

。私は何が欠けている可能性がある任意のアイデア?

答えて

0

フィールドアクセスはコンストラクタの外でしか機能しません。たとえば、コンストラクタからprint文をinitializePageに移動すると、それが動作します。

+0

コンストラクタの「外側」で作業することは、たぶんストーリーの半分に過ぎません。ほとんどの場合、イベントキューが空になったら動作します。 –

+0

私はボンネットの下で何が起こっているのか分かりません。また、ドキュメントには注釈もありません。おそらく 'initializePage'メソッド(おそらく最初の場所で使われることになっていた方法です)でフィールド呼び出しを行うだけでいいと思います。 –

関連する問題