問題タブ [qiodevice]
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.
c++ - QuaGzipFile (QuaZIP ライブラリ) で読み取られたデータの進行状況を報告する方法
Ubuntu 12.04 x86_64 で C++ 用の Qt 5.1.1 で QuaZIP 0.5.1 を使用しています。
私のプログラムは、gzip で圧縮された大きなバイナリ ファイル (通常は 1 GB 以上の圧縮されていないデータ) を読み取り、その上でいくつかの計算を行います。計算量は多くなく、ほとんどの時間は I/O で渡されます。そのため、ファイルのデータの読み取り量を報告する方法を見つけることができれば、進行状況バーで報告し、ETA の見積もりを提供することもできます。
私はファイルを開きます:
ただし、QuaGzipFile には、ファイル サイズや現在の位置を見つける機能はありません。
非圧縮ストリームのサイズと位置を見つける必要はありません。進行状況の大まかな見積もりで十分なので、圧縮ストリームのサイズと位置は問題ありません。
現在、を使用して、圧縮ファイルのサイズを見つけることができますQFile(fileName).size()
。また、の戻り値の合計を保持することで、圧縮されていないストリーム内の現在の位置を簡単に見つけることができますgzip.read()
。しかし、これら 2 つの数値は一致しません。
必要に応じて、QuaZIP ライブラリを変更し、内部の zlib 関連のものにアクセスできます。
qt - C++ から QML Video Player へのビデオ データの入力
QML でビデオ プレーヤー アプリケーションを実装する最良の方法を探しています。ほとんどすべての QML の例は、ファイルシステムまたは Web からファイルを読み取っています。
に似たインターフェイスを持つMediaPlayer
C++派生クラスの独自のソースを指定したいと考えています。それは私のニーズにぴったりです。ビデオを部分的にプリロードし、後で使用するためにキャッシュする必要があります。QObject
QIODevice
私のニーズに対する簡単な解決策はありますか? (私は Qt 5.2 を使用しています)
c++ - Mac OS (10.9) での暗号化を使用したカスタム QIODevice からの QMediaplayer ストリーミング
現在、アプリケーションを Qt4(.8.4) から Qt5(.2.0) に移植しています。非推奨の toAscii() 関数、QtGui の欠落など、既知のすべての変更をほぼ完了しました。現在、フォノン フレームワークを使用する音楽プレーヤーがありましたが、これはサポートされなくなり、QMediaPlayer と一連の Audio-Handling クラスを含む QtMultimedia モジュールに置き換えられました。
プレーヤーの実装は、カスタム QIODevice を取ります。このデバイスは、ディスク上の暗号化されたオーディオ ファイルへのインターフェイスを提供します。プレーヤーはデバイスに x バイトを要求し、デバイスは暗号化されたファイルから読み取り、プレーヤーが要求したバイトを復号化して返します。
マルチメディア モジュールで IODevice を再利用する関数を検索したところ、次の関数が見つかりました。
そしてそれを次のように使用しました:
ここで、m_pDecryptingMediaDevice は QIODevice サブクラスで、m_pPlayer は QMediaPlayer です。
現在、Windows ではすべてが期待どおりに動作します。QMediaplayer はその MediaStatus を QMediaPlayer::LoadingMedia に変更し、デバイスにバイトを要求します。次に、QMediaPlayer::State PlayingState に変更され、ステータスが BufferedMedia に設定されます。すべて順調。残念なことに Mac OS (10.9.1) では QMediaPlayer::PlayingState しか取得できず、それ以上は取得できません。プレーヤー/オーディオバックエンドはデバイスにバイトを要求することはなく、他の関数を呼び出すこともありません。間違いがカスタム QIODevice に関係しているとは思いませんが、プレーヤーがバイトを要求したり、デバイス上の関数を呼び出したりすることさえないため、QMediaPlayer に与えられる方法にあります。
私はそれを小さなテストプロジェクトに分解しようとしました:
不思議なことに、これはまったく再生されません - Windows でも Mac OS でもありません。常に機能するのは、次のようにプレーヤーに URL を与えることです
関数 setMedia(const QMediaContent & media, QIODevice * stream = 0) を使用して QIODevice から QMediaPlayer にストリーミングすることによると、同様のケースで誰か経験がありますか? 私はこれで立ち往生しています。
よろしくお願いいたします。
1月
qt - QSerialPort を使用したシリアル ポートからの読み取りでのトラブル
組み込みの FriendlyARM ベースのプロセッサ システム用の C++ プログラムを開発する必要があります。デスクトップコンピュータには Qt Creator 3.0.0 (Qt 5.2.0 ベース) を使用しています。私のプログラムは、Mini2440 FriendlyARM プロセッサのシリアル ポートから読み取ることができるはずです。
ターゲット システム (組み込みシステム) に移動する前に、ラップトップのシリアル ポートの読み取りと書き込みを試みました。私の主な問題は、シリアルポートから読み取る方法です。ご存知のように、新しいコンピュータやラップトップにはシリアル ポートがありません。そのため、手作りの USB-シリアル アダプタ ケーブルを使用して、シリアル ポート プログラミングをシミュレートしようとしています。USBシリアルケーブルを差し込むと、Ubuntuでは「/dev/ttyUSB0」として認識されます。うまくいきそうです。ケーブルのもう一方の端 (シリアル ポート) はどこにも接続されていないことに注意してください。
私の最初の質問は次のとおりです。このようにケーブルを構成しても問題ありませんか、それとも他のデバイスに接続する必要がありますか? 10 秒ごとに /dev/ttyUSB0 に書き込み、データを読み取ろうとします。私は次のコードになりました:
シリアルポートへの書き込みはOKです。しかし、読み込み時に「そのようなファイルやディレクトリはありません」という問題が発生することがあります。ときどき「ファイルが一時的に利用できません! 奇妙なことに、notifAreaPort.error() は 0 を返します。これは、エラーが発生していないことを意味します!
考え?
-- サイード・アムローラヒ・ボヨウキ
qt - Qt QTcpSocket ストリーミング
私のアプリケーションは、を介してサーバーにオブジェクトを送信しましたQTcpSocket
。
クライアント:
サーバ:
問題は何も起こらないことですが、デバッグコンソールは私に言った:
...しかし、このQDataStream
オブジェクトではオープン モードを設定できません! :( どうしたの?
c++ - QIoDevice で memcpy を取り除く方法
Qtを使用してオーディオ出力を作成しています。オーディオ出力の例があり、純粋な仮想関数 qint64 QIODevice::readData ( char * data, qint64 maxSize ) がこのように再実装されています (これは例の実際のコードではありません)。
したがって、データへのポインターを取得し、バッファーからこのデータにメモリをコピーします。次のように、ポインターデータを新しい場所に割り当てることができるかどうか疑問に思っています。
なぜなら、memcpy は遅く、C です。ありがとうございました!
OK、「何が遅いのか」というコメントを受け取らないでください: 1 つ目 - memcpy はポインター割り当てよりも遅い 2 つ目 - はい、サウンドの再生にレイテンシーがあります。プログラムをあらゆる点で最適化したいと考えています。
PS私はそれをやろうとしていますが、音が出ないので、答えはノーかもしれません. それでなんで?
c++ - 読み取り用の QIODevice の合計サイズを確認するにはどうすればよいですか?
私はqt 5.3を使用しています。
読み取り用に QIODevice に大きなものを書き込んでいます。QIODeviceのデータを他の人が読み取れるように保ちながら、データを取得するためのプロキシが必要です。したがって、 readAll() を呼び出すと、プロキシですべてが適切に取得されますが、他のリーダーはデータを取得できません。
peek() を使用する必要があると思いますが、これには maxsize が必要なようです。size() または bytesAvailable() を渡そうとしましたが、実際のサイズを取得できませんでした。彼らはおそらく 3287 という奇妙な値のバッファ サイズを返します。しかし、私のデータは 1081530 バイトと巨大です。
読み取り用の QIODevice の実際のサイズを取得するにはどうすればよいですか?
編集: 上記で言及した QIODevice は、実際には QNetworkReply です。QWebView を使用してプログラムの要求と応答のデータを観察し、いくつかのフラッシュ ゲームにアクセスするためのプロキシを作成したいと考えています。QNetworkAccessManager のサブクラスの createRequest を実装しました。分析したいのは、createRequest からの応答の finished() シグナルを介してキャッチしたものです。
Edit2: この QIODevice はシーケンシャルなものであるため、サイズが不明です。しかし、データを消去せずに読み取る方法は?