問題タブ [qobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - QOBJECT マクロ宣言
QOBJECT マクロを宣言しましたが、QObject オブジェクトを渡さずに関数を呼び出しています。
ここに私のコードkeyusermanagertest.cppがあります
keyusermanagertest.h
そのコンパイル出力は次のとおりです" /home/puneet/puneet/office/alkimia/payment/backend/keyusermanagertest.cpp: In member function 'void KeyUserManagerTest::settersAndGetters()': /home/puneet/puneet/office/alkimia/ payment/backend/keyusermanagertest.cpp:52: エラー: 'StorageUserManager::StorageUserManager()' の呼び出しに一致する関数がありません /home/puneet/puneet/office/alkimia/payment/backend/storageusermanager.h:41: 注: 候補次のとおりです: StorageUserManager::StorageUserManager(QObject*) /home/puneet/puneet/office/alkimia/payment/backend/storageusermanager.h:37: 注: StorageUserManager::StorageUserManager(const StorageUserManager&) /home/puneet/puneet/office/ alkimia/payment/backend/keyusermanagertest.cpp:53: エラー: 'KeyUserManager::KeyUserManager(StorageUserManager*&)' /home/puneet/puneet/office/alkimia/payment/backend/keyusermanager.h:44: 注: 候補は: KeyUserManager::KeyUserManager(StorageUserManager*, QObject*) /home/puneet/puneet/office/alkimia/ payment/backend/keyusermanager.h:41: 注: KeyUserManager::KeyUserManager(const KeyUserManager&)
ありがとう
compilation - Qt Creator がすべてのファイルで MOC を実行するのはなぜですか?
プリコンパイル済みヘッダーが有効になっている Qt プロジェクトがあります。コンパイルは最近まで正常に機能していました。しかし、露の日以来、Qt Creator が常にすべての Q_OBJECT ファイルで MOC を実行していることに気付きました。そのため、多くの CPP ファイルも理由もなく再構築する必要があります。
それが起こる理由はありますか?コンパイル出力を見ていますが、特別なことは何も見ていません。何か案が?
visual-studio - Q_OBJECT Visual C++ の問題
お客様から Visual C++ QT ベースのプロジェクトを受け取りました。QT ライブラリをインストールしてから、プロジェクトをコンパイルしました。プロジェクトは問題なくコンパイルされました。
ここで、既存のプロジェクトに新しい GUI インターフェイスを追加する必要があります。QT デザイナーで GUI を作成し、VC++ プロジェクトのソース ディレクトリに保存しました。次に、新しい GUI 用に .h および .cpp ファイルを作成し、このインターフェイスを呼び出すことができました。.h ファイルに Q_OBJECT をインクルードする場合、SIGNALS と SLOTS をインクルードする必要があります。コンパイルエラーがあります。
これらはエラーです。この問題を解決するのを手伝ってください:
visual-studio-2008 - 終了スロットが見つからず、Q_OBJECTマクロを使用できません
QT4.7.1とアドインでVS2008を使用しています。私はこの環境に不慣れです。
必要な設定を行い、簡単な「helloworld」を実行することができました。しかし
quit()
、ボタンをクリックするだけで単純なスロットを使おうとすると失敗しました。また、を使用しようとするとビルドが失敗しますQ_OBJECT
。
コメントした後Q_OBJECT
、コードがビルドされ、デバッグされます。今それは示しています
QObject :: connect:。\main.cppにそのようなスロットQWidget:: quit()が見つかりません。
以下は私のコードです
ネットで検索しましたが、妥当な解決策が得られませんでした。ほとんどのソリューションは、コマンドラインでqmakeを操作するためのものです。また、プロジェクトの.proファイルを見つけることができます。
どんな助けでも大歓迎です。
c++ - QThread と QWidget による多重継承 ( QObject による多重継承)
OgreWidget
クラス -A ポータブル レンダラー ウィジェットを Qt で設計します。
QThread
(私のデザインでは)、 (無限レンダーループの場合)およびQWidget
(そこにレンダリングするオーガのターゲットウィジェット)でクラスを継承する必要があると思います。
しかし、多くのドキュメントや記事 (たとえば、この) によると、 Virtual inheritance with QObject
is not supported . この継承の結果は次のようなエラーになります。
QObject
のあいまいなベースですOgreWidget
この問題を解決するにはどうすればよいですか?
PS: 私の古いデザインでは、別の を作成し、ターゲット ウィジェットとしてQWidget
送信WId
します。OgreWidget
しかし、私はより良い、よりクリーンなインターフェースを設計するつもりです。
c++ - QObjectの二重削除
現在、Mac OSX10.6でQt4.7.4を実行しています。MacPortsを使用してQtをインストールしました。
私はコーディングの一環としてテスト駆動開発を使用しようとしており、この目的でQtTestを使用しています。QObjectから派生したクラスがあり、コードをテストしようとすると、合格するはずのときにテストが失敗します。(test -vs)の出力を確認したところ、次のエラーが発生しました。
情報:periodictable :: ElementTest :: testName()シグナル:QObject(7fff5fbfd860)が破棄されました((QObject *)7fff5fbfd860)
テストケースでは、実際のテストを挟んで、上記のエラーを2回観察します。これは、子オブジェクトが使用前に破棄され、テスト後に再び削除されたように見えることを示しています。QPointerを使用し、使用前にオブジェクトが無効になることを確認しました。別の方法は、各テストケース内の変数を初期化することです。これにより、シングルショット初期化の目的が無効になり、コードの膨張が増加します。
私は次のコマンドを使用します(cmake経由):
g ++ -D_FORTIFY_SOURCE = 2 -D_GLIBCXX_FULLY_DYNAMIC_STRING -D_FORTIFY_SOURCE = 2 -DQT_TEST_LIB -DQT_CORE_LIB -DQT_DEBUG -Wformat-security -Wmissing-format-attribute -Wformat = 2 -Wctor-dtor-privacy -Wabi -Woverload nonliteral -Wdisabled-optimization -Wformat-y2k -Winit-self -Winvalid-pch -Wunsafe-loop-optimizations -Wmissing-format-attribute -Wmissing-include-dirs -Wstrict-aliasing = 3 -Wswitch-enum -Wvariadic-macros- Wvolatile-register-var -std = gnu ++ 0x -fmessage-length = 0 -ftree-vectorize --param max-unroll-times = 4 -pipe -fabi-version = 4 -g -I / opt / local / include / QtCore -fPIC -fstack-protector -fPIC -fstack-protector -Wstack-protector
Qt 4.6でこの問題が発生したことを思い出せません。また、早期の破壊について混乱しています。
これはQt内のバグではないと思いますが、他の誰かがそのような問題に遭遇して解決策を見つけたのではないかと思います。私はQtが好きですが、この問題は単体テストに限定されません。どんな助けでも確かにありがたいです。
- 編集 -
テストケースのソースコード:
.hファイル内
.cppファイル内
c++ - QObjectから派生せずにSIGNALとSLOTを使用するにはどうすればよいですか?
または、質問を定式化する他の方法(問題は解決しませんでしたが):'QObject :: QObject'は、クラス'QObject'で宣言されたプライベートメンバーにアクセスできません
クラスにSIGNALsとSLOTSの機能が必要ですが、QObject
?から派生しないと不可能だと思います。
問題は、信号とスロットを使用するために派生する必要があることのようQObject
です...しかし、デフォルトのコンストラクターが必要ですMyClass
。しかし、次の機能のためにそれらを構築できませんQObject
:
コピーコンストラクターまたは代入演算子がありません。
たくさんやってみました...
だから私のshoulクラスはそのように見えます:
のデフォルトのコンストラクタが必要ですMyClass
。
それで、「'QObject :: QObject'はクラス'QObject'で宣言されたプライベートメンバーにアクセスできません」エラーを回避する可能性はありますか?
または、代わりに、信号とスロットを使用せずに使用する可能性はありますQObject
か?
アドバイスをいただければ幸いです。
c++ - (Qt Creator - Cpp ベースのアプリケーション) QVSポインターを使用していますか?
ここに私のコードがあります:
より効率的ですか(これは質問の「Q [Objects] VS using Pointers?」の部分です):
1)私が実際に行っているようにポインタを使用するか、
2) オブジェクトを使用する (* + delete ステートメントの削除)
ありがとうございました!
c++ - QtですべてのQObjectクラスを列挙する方法は?
アプリケーションまたは DLL で宣言されたすべての QObject クラスを列挙する方法はありますか? DLL をロードし、DLL 内のすべての QObject クラスを一覧表示するアプリケーションを作成しようとしています。
更新: 実際には、単体テスト GUI を作成しようとしています。DLL をロードし、内部で QObject をインスタンス化し、それらに対して QTest::qExec を呼び出します。
qt - Qt:基本クラスのメソッドを派生クラスのスロットに入れます
QWidgetとモデルクラスから派生したクラスがあります。私の読書に基づいて、QObjectから派生するモデルクラスを持つことはできません。
モデルクラスMyModelClassには、setWidth(bool)などのプロパティを設定するメソッドが既にあります。これらの方法を直接スロットとして使用することはできないようです。私が宣言した場合:
QObject :: connect(button、SIGNAl(dataChanged(bool))、this、SLOT(setWidth(bool)));
Qtは、実行時にスロットsetWidth(bool)がないと文句を言います。MyModelClassの同じメソッドを呼び出すだけのPageWidgetに各メソッドを手動で追加する必要があります。
すべてのメソッドを再宣言せずに基本メソッドをスロットに入れる方法はありますか?