問題タブ [qt-slot]

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 に答える
885 参照

python - PyQt5 ダイアログがメイン ウィンドウを閉じる

PyQT4 コードを PyQt5 に変換しようとしていますが、これには新しいスタイルの信号接続が必要です。私が使用する場合:

すべてが期待どおりに機能します。[OK] または [キャンセル] をクリックすると、ダイアログ ウィンドウが閉じます。新しいスタイルのシグナルを使用する (ここで私は何か間違ったことをしていると思います)

[OK/キャンセル] をクリックすると、メイン ウィンドウが閉じ、ダイアログが表示されたままになります。これは間違いなく起こるべきことではありません。

私は何を間違っていますか?

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

c++ - CONNECTによって認識されないサブクラスのQtカスタムSLOT

バックグラウンド

Qt でメディア プレーヤー アプリケーションを作成しています。QMediaPlayer をサブクラス化し、int を解釈して qint64 として QMediaPlayer::SetPosition(qint64) に渡すことができる新しい SLOT を作成しました。

QMediaPlayer::PositionChanged は cslider slider_playback (水平スライダのサブクラス) に信号を送信します。これにより、曲の再生に合わせてスライダーが動きます。曲の長さと曲の再生位置に関する信号を受信する、サブクラス化されたラベル (clabel) もあります。

問題

ビルドして実行すると問題が発生し、次のエラーが表示されます。

/home/daniel/DeveloperProjects/build-Player-Desktop_Qt_5_9_1_GCC_64bit-Debug/Player を起動しています...

QObject::connect: No such slot QMediaPlayer::set_playback_position(int) in ../Player/mainwindow.cpp:23

QObject::connect: (送信者名: 'slider_playback')

スライダーは、再生の位置を制御できる必要があります。問題のあるコード行の前に、ファイル内の '// Player seek' コメントがあります。

このエラーは、スロットが実際には派生クラスの一部であるのに対し、基本クラスが SLOT に対して参照されていることを示していると思います。

このエラーが発生する理由と、問題を解決するアクションを教えてください。私の clabel および cslider クラスのスロットは問題なく動作します。違いは、これらのクラスにはコンストラクタとデストラクタがあることです。基本クラスのコンストラクターをオーバーライドしたくないため、QMediaPlayer サブクラスにコンストラクターを実装していません。

cmediaplayer.h (完全なファイル)

cmediaplayer.cpp (完全なファイル)

mainwindow.h (完全なファイル)

mainwindow.cpp (完全なファイル)