2011-12-03 7 views
1

私はQtの初心者で、基本的な電卓を作っています(少なくとも作ろうとしています)。私が正しく理解していれば、このやって:Qt SLOTSのパラメータ(初心者)

connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4"))); 

を「4」writeNumberLblに(むしろ、唯一のタイプがある)にアクセスできません。基本的には、ボタンをクリックすると、ラベルのテキストが「4」に設定されます。しかし、私は番号0〜9まで持っているので、私はやってみたかった:

connect(my_button_0, SIGNAL(clicked()), this, SLOT(writeNumberLbl("0"))); 
connect(my_button_1, SIGNAL(clicked()), this, SLOT(writeNumberLbl("1"))); 
... 
connect(my_button_9, SIGNAL(clicked()), this, SLOT(writeNumberLbl("9"))); 

マイwriteNumberLbl機能は次のとおりです。しかし、私は、これが原因パラメータに動作しないことを

void Calculator::preWriteVal(QChar val) 
{ 
    QString curVal = ui.lbl_output->text(); 
    curVal += val; 
    ui.lbl_output->setText(curVal); 
} 

見ることができます'val'。誰かが正しい方向に私を指差してくれますか?ありがとうございました。私はこの質問がすでに答えられていて、何も見つけられなかったかどうかを調べました。それがあれば、私にリンクを提供してください。

また、Qt Designer 4を使用してウィジェットをカスタムスロットに接続することは可能ですか?

ありがとうございます。

+0

似たような質問に対する私の答えを見てください:http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522 – TonyK

+0

Qtアプリケーション開発の初心者:https://qtnoobies.blogspot.my/ – GeneCode

答えて

0

この問題に取り組むにはいくつかの方法があり、それらはvery nicely hereと概説されています。そのページは少し古くなっていますが、それはまだかなり有効です。シグナルマッパーの使用をお勧めします。

2番目の質問には、はいです。 「信号/スロットの編集」モードで設計者を設定することで、Qt Designerを使用して信号とスロットを接続することができます。たとえば、このモードに入ると、ボタンからフォームに接続線をドラッグできます。ダイアログボックスが開き、接続する信号とスロットを選択できます。まだコード内にスロットを実装していない場合は、スロットの名前を指定してから、その後にコードを追加することができます。

+0

アドバイスをいただきありがとうございます。しかし、私は "Edit Signals/Slots"モードを知っています。私は、カスタムスロット(私が作ったスロット)にプッシュボタンをドラッグする方法があるのか​​どうか疑問に思いました。 –

+0

はい。すでにスロットを定義している場合は、そのスロットを持つオブジェクトにコネクタをドラッグし、その結果のダイアログボックスにワイヤリングすることができます。 –

+0

助けてくれてありがとう。私は今、はるかに良く理解していると思います。 最後にこれが書かれています:「...あなたが標準色のセットから色を選択できるようにし、colorSelected(const QColor&)信号を出す必要があるパレットツールを実装するならば、最善の策は、上記のsender()アプローチまたはサブクラスのアプローチを使用することです。 if-elseステートメントが必要かどうかは、たとえば if(button1 ==(* pusbutton)sender()) //パレットの色を青に変更する else if(button2 ==( * pusbutton)sender()) //パレットの色を赤に変更 など –

1

私が知る限り、Qtの信号/スロットシステムでは、信号機能のパラメータの数がスロット機能の未満のでないことが必要です。 あなたの例では、信号関数click()にはパラメータがなく、スロット関数writeNumberLbl( "4")にはパラメータが1つあります。これはQtのシグナル/スロットシステムでは受け入れられません。また、 qDebugは 'Incompatiable signal/slot' blalbalba〜のようなメッセージを表示します。この問題を解決するには、Arnold Spenceの記事を読んでください。それはかなり明確です。

0

Slotのパラメータ数はSignalのパラメータ数を終了できません。 pressed()には何もありません。 2つの選択肢があります(3つは、ダムを1つカウントします)。

  1. QSignalMapperを使用します。その助けは自明である。
  2. すべてのボタンを1つのスロットに接続します。その中で、どのボタンが押されたかを調べます。 QObject :: sender()関数は役に立ちます。

さらに多くの方法がありますが、もっと複雑です。