2010-11-18 9 views
2

qtデザイナを使用してToolButtonを作成し、スロットに接続しようとしました。 私はプログラムを実行することができイムこのQtoolbuttonを使用した信号とスロット

connect(ui->toolButton_addfiles, SIGNAL(triggered()), this, SLOT(changeDirectory())); 

を書いたが、私はボタンを押したときに、私は私のQtアプリケーションの出力に次のログを参照してください。私はいくつかにtoolButton_addfileを変更した場合は

Object::connect: No such signal QToolButton::triggered() in ../RightDoneIt/rightdoneit.cpp:10 
    Object::connect: (sender name: 'toolButton_addfiles') 
    Object::connect: (receiver name: 'RightDoneIt') 
  • アクション(actionChange_addfile)のように動作します。

どうすればこの接続が可能ですか?

答えて

4

エラーが示すように、triggered()ではなく、の信号がQToolButtonにあります。あなたがしたい場合は

編集 QToolButtonクラスは(パラメータなし)無信号triggered()を持っていないのでコネクト機能では、あなたがtriggered(QAction*)のような信号の署名を持っている必要がありますが、コメントで説明して

を削除すると宣言しましたこの接続を使用するには、QActionポインターをパラメーターとして使用するスロットを用意する必要があります。これができない場合は、clicked信号で試してみてください。

+1

いいえ、スロットはQAction *を取る必要はありません。それは全く引数を取ることもできません。スロットがシグナルよりも引数が少ない場合、末尾の引数は破棄されます。 –

+0

あなたが正しいです、少し私の答え –

+0

が(QAction *)トリガーされても動作しません変更されます。私はclicked()シグナルでそれを修正しました。皆さんありがとうございました! – Sharethefun

0

QActionを作成してQToolButtonに追加し、それを自分のクラスのスロットに接続しようとしていますか?

スロットをQToolButton :: triggered(QAction *)信号またはQAction :: triggered()信号に直接接続することができます。どちらの場合でも、QActionはQWidget :: addAction(QAction *)を介してQToolButtonに追加する必要があります。スロットのメソッドシグネチャはシグナルのシグネチャと一致しなければならず、接続呼び出しにはシグナルの名前だけでなくシグナル/スロットパラメータも含まれなければなりませんとスロット。

2

Qtの自動接続プロセスを使用できます。あなたのUIを参照するクラスで

、と呼ばれるスロットを作成:

on_toolButton_addfiles_clickedを();

Exemple:

参照:A Dialog With Auto-Connect

class ImageDialog : public QDialog, private Ui::ImageDialog 
{ 
    Q_OBJECT 

public: 
    ImageDialog(QWidget *parent = 0); 

private slots: 
    void on_okButton_clicked(); 
}; 

・ホープ、このことができます!

編集:いいえは、シグナルをqAbstractButtonでトリガーしました。 http://doc.qt.nokia.com/4.7/qabstractbutton.html

関連する問題