2017-06-24 3 views
0

Qtが新しく信号とスロットを書き込もうとしています。以下は私が実行しようとしていたコードです。 SLOTとSIGNALキーワードを "connect"関数で使用すると、うまく動作します。しかし、私はconnect関数にSIGNALとSLOTキーワードを使用するのではなく、別のアプローチを使用したいと考えています。QT信号とスロットが動作していないというエラーメッセージが表示される

上記のコードでは、コメントアウトされた接続機能はうまく機能しますが、コメント付きの接続機能は機能しません。 "MyWindow :: connectを呼び出す関数がありません"というエラーが表示されます。私はここで何を間違えたのかよく分からない。私はqtからこの記事をフォローしていました。 QSpinBox::valueChanged - - とスロット - QLCDNumber::display - 異なる引数の型のための複数のオーバーロードを有する

http://doc.qt.io/qt-5/qtopengl-hellogl2-window-cpp.html

答えて

1

問題は、両方の信号があることです。いくつかの選択肢があります。

1)

connect(mySlide, 
     static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
     lcdNumber, 
     static_cast<void(QLCDNumber::*)(int)>(&QLCDNumber::display)); 

または...

2 ...各種信号とスロットのオーバーロードとの間で明確にするためにstatic_castを使用)だけlambda ...

connect(mySlide, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
     [lcdNumber](int value) 
     { 
      lcdNumber->display(value); 
     }); 
を使用

lambda stillを使用する場合は、信号にstatic_castが必要です。

+0

ありがとうございました。それはうまくいった。しかし、connect(mySlide、SIGNAL(valueChanged(int))、lcdNumber、およびQLCDNumber :: display)がなぜ機能しなかったのかを知りたいのは興味深いだけです。最初の部分は明示的な信号です。 – LilRazi

+0

さまざまな信号/スロット構文を混在させて一致させることはできません。これは、すべてのSIGNALとSLOT構文*または*メンバー構文の新しいポインタです。 –

関連する問題