2009-04-28 1 views
0

現在、Qt4とC++を使用してプロジェクトを完了しようとしています。私は状態を切り替えるためにボタンを使用しています。テキストエディットにボタンを接続しようとしながらクリックされた()の信号は、私はエラーに捕まってしまった、関連する状態を表示するには:Qt4の既存のスロットが認識されない

Object::connect No such slot QTextEdit::append("move state") Object::connect No such slot QTextEdit::append("link state")

のみ、QTextEditは間違いなくAPPEND(QStringの)スロットを持っています。

アイデア?

いくつかのサンプルコード:

QPushButton *move = new QPushButton("Move"); 
connect(move, SIGNAL(clicked()), textEdit, SLOT(append("move state"))); 

答えて

6

スロット接続に信号を作るときは、引数(文字通り)追加する()スロットに渡すことができません。

あなたはメソッドシグネチャのようにそれを参照してください。

SLOT(append(QString)) //or const QString, I'm not sure 

あなたは言葉はボタンがクリックされるたびに、「状態を移動」を追加するテキストボックスが必要な場合は、次にあなたがどうなる独自のスロットを定義する必要があります追加する。

+0

これは機能しません。引用符でメソッドシグネチャを挿入することを意味しましたか?ありがとう。 – pypmannetjies

+0

ああ、申し訳ありませんが、私はQtとPyQtの両方で動作し、間違った構文を使用しました。はい、間違いなく引用符を意味するわけではありません... –

+0

助けてくれてありがとう – pypmannetjies

4

クリスはそれを要約しています。

これは、私がboost ::が好きな多くの理由の1つです(これはboost :: bindを使うことが許されています)。基本的には、信号をキャプチャして追加を実行する別の関数を作成する必要があります。

あなたは QButtonGroup内に置くことができ、他の状態が発生する原因となります他の QPushButton秒を持っているだろうと仮定
... 

QPushButton *move = new QPushButton("Move"); 
connect(move, SIGNAL(clicked()), textEdit, SLOT(MoveState())); 
} 

... 

void MyTextEdit::MoveState() 
{ 
    append("move state"); 
} 
1

。次に、{ MOVE_ID, STOP_ID, ... }などの列挙を使用して、可能な状態を参照することができます。

QPushButton* move = new QPushButton("Move") ; 
QPushButton* stop = new QPushButton("Stop") ; 
QButtonGroup* buttonGroup = new QButtonGroup() ; 
buttonGroup->addButton(move, MOVE_ID) ; 
buttonGroup->addButton(stop, STOP_ID) ; 

// Connecting QButtonGroup to writing function 
connect(buttonGroup, SIGNAL(buttonClicked(int)), 
     textEdit, SLOT(append(int))) ; 

textEditでは、あなたが取得する状態に応じて、適切なテキストを追加する機能を定義します。

void append(int i) 
{ 
    switch (i) 
    { 
     case MOVE_ID: 
     textEdit->append("move state") ; 
     break ; 
     case STOP_ID: 
     textEdit->append("stop state") ; 
     break ; 
    } 
} 
3

を使用して、ハードコードされた引数をテキスト編集のスロットに渡します。

例:

QSignalMapper* signalMapper = new QSignalMapper(this); 
QPushButton* move = new QPushButton("Move"); 
signalMapper->setMapping(move, QString("move state")); 
connect(move, SIGNAL(clicked()), signalMapper, SLOT(map())); 
connect(signalMapper, SIGNAL(mapped(QString)), textEdit, SLOT(append(QString))); 

は、上記のコードのバグに注意します。

関連する問題