問題タブ [qshareddata]

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.

0 投票する
1 に答える
2033 参照

c++ - QObject から継承しながら QSharedData を使用できますか?

Qt でプライベート実装 (暗黙の共有) を非表示にするにはどうすればよいですか?

Employee.h ヘッダーに次の Employee.cpp があります。

しかし、EmployeeData をプライベート パーツ、たとえば Employee.cpp に移動すると、次のエラーが表示されます: エラー: 不完全な型 'struct EmployeeData' の無効な使用</p>

ただし、定義を次のように変更すると、正常に動作します。

したがって、 QObject から継承しながら QSharedData を使用できますか?

0 投票する
2 に答える
561 参照

qt - QSharedData ベースの構造を自動的に生成する方法はありますか?

QSharedDataQt には、およびを介して参照カウントが統合されたオブジェクトを作成するためのビルトイン サポートがありQSharedDataPointerます。すべてうまく機能しますが、そのようなオブジェクトごとに多くのコードを記述する必要がありますQSharedData

5 ~ 10 個のフィールドを持つ単純な構造の場合、これには非常に多くのほぼ同じコードが必要です。そのようなクラスの生成を自動化する方法はありますか? たぶん、短い説明を取り、すべてのアクセサーで実装クラスとオブジェクトクラスを自動的に生成するジェネレーターがいくつか存在するのでしょうか?

0 投票する
3 に答える
849 参照

c++ - プライベート (非表示) QSharedData

呼び出し元から隠したいデータ メンバーを持つクラスがあります (型のヘッダーを含めるとコンパイル時間が大幅に長くなり、このクラスを使用するすべてのプロジェクトでインクルード パスにパスを追加する必要があるため) )。

このクラスはQSharedDataPointer、このデータを格納するために使用します。このようにして、デフォルトのコピー コンストラクターを使用してコピーできます。

このクラスの基本構造は次のとおりです。

同じヘッダーファイルで(から継承する)を定義せずにこれを行うための巧妙なトリックはありますか? または、データ フィールドを非表示にする他の良い方法はありますか?MySharedClassDataQSharedData

私はすでに の前方宣言を試みましたが、これはうまくいきませんでした (事実にもMySharedClassDataかかわらず)。m_dataprivate

私が現在できる唯一の解決策は、m_dataとして宣言するQSharedDataPointer<QSharedData>ことですが、アクセスするたびにデータメンバーをキャストする必要があります。より良い解決策はありますか?

0 投票する
1 に答える
3601 参照

c++ - すべてのデータクラスをQSharedDataとして実装し、QSharedDataPointerで使用する必要がありますか?

私はQtの初心者であり、いくつかのデータクラスを作成する必要があります。QSharedDataPointer例(ここ)のようにこれらすべてのクラスを作成するのは良いアプローチでしょうか、それともこれはオーバーヘッドが大きすぎるのでしょうか(作業量が多いという事実を除けば)?

私のクラスは、以下のクラスと非常によく似ていますEmployee。1万や数百万ではなく、数百のインスタンスを処理する必要があります。

QSharedData / QShareDataPointerを使用する動機は、手動のメモリ管理を簡素化し、共通のコードスタイルを使用することです。しかし、私がいくつかの警告を監督しているかどうかはまだわかりません。

から:

0 投票する
1 に答える
1042 参照

qt - QImageコピーオンライト

QImage基づいていQSharedDataますか?Qimageフォローするpimplか?copy on writeたとえば、Qimageを(コピーコンまたは割り当てを介して)コピーすると、ピクセルのディープコピーが作成されますか?

0 投票する
4 に答える
2373 参照

c++ - QSharedDataと継承

を使用しながら型システムを作成しようとしていQSharedDataます。考え方は単純で、さまざまなデータ型があり、それぞれが基本抽象クラスから派生します。それぞれに実際のデータを格納するために使用したいのですQSharedDataが、派生クラスのそれぞれに異なるデータが格納されます。私は今、最も基本的な例を作ろうとしていますが、いくつか問題があります。

これらが私の基本的な純粋な仮想クラスであるとしましょう。

ここで、単一の値を表すためのクラスを作成するとします(つまり、最小の例として)。基本値クラスから派生しcAtomicValueています。また、値を保持するデータクラスも派生しています。

この段階では問題なく動作し、デバッガーで正しいポインターの種類を確認できます。しかし、今は値を設定して取得するための関数を追加したいのですが、その方法がわかりません。セッターを例にとってみましょう。値を設定するには、クラスのメンバーを介してクラスのvalue_メンバーにアクセスする必要があります。ただし、は基本クラスのポインタ( )を保持しているため、何らかの方法で正しい型()にキャストする必要があります。私はこれをやってみました:cAtomicDatadata_cAtomicValuedata_cAbstractDatacAtomicData

detach()基本クラスが純粋な仮想であるために呼び出せず、基本クラスのコピーを作成しようとするため、明らかに機能しません。次に、ポインタ自体をキャストしようとしました。

しかし、invalid static_cast ...エラーが発生します。

どうすればいいですか、基本的に正しい方法でやっていますか?

0 投票する
1 に答える
173 参照

c++ - QSharedDataPointer と QSharedData の代替実装

Qt の代替ライブラリで、暗黙の共有のために QSharedDataPointer や QSharedData のようなシステムに出くわした人がいるかどうか疑問に思っていました。

可能であればシステムに余分な依存関係を追加することを避けようとしており、単に私のオプションが何であるか疑問に思っています。

0 投票する
1 に答える
1188 参照

c++ - QSharedData のクラッシュ

Qt 5.2.0 アプリケーションでまれに、かなり一貫したクラッシュが発生し、診断にかなりの時間を費やしていますが、関連していると思われますQSharedData。アプリケーションは高度にマルチスレッド化されており、これがおそらく問題の一部です。

問題のクラスは次のとおりです。

ここでクラッシュが発生し、 Route を に挿入しますQMap

m_lastRouteMap はQMap<quint16, Route>です。

スタック トレースは次のようになります。

#5 で QMap::insert を実行し、#4 で (Route "=" 演算子を介して) コピーを作成します。#3 で、問題の Qt コードは次のようになります。

「delete old」を押して、dtor の 1 つQDateTime(実際にはプライベートQTimeZoneメンバー) で seg faulting を実行しています。

私のezspSendUnicast()メソッドは、クラッシュする前に何十万回も繰り返し実行できます。(valgrindによると)メモリをリークしているとは思いません。ezspSendUnicast() に渡している Route オブジェクトは適切にミューテックスで保護されていると思いますが、何かを見落としている可能性があります (ただしQSharedData、いずれにせよ、コピー オン ライトに対してはスレッド セーフであると考えていました)。

この問題に取り組む方法についての洞察をいただければ幸いです。