1

クリックしたときにプッシュボタンを作成したいのですが、テキストが「クリック」に変わります。やってみた

connect(button1, SIGNAL(clicked()), this, SLOT(markClicked(button1))); 

とをthis参照してMainWindowください

void MainWindow::markClicked(QPushButton *button) { button->setText("Clicked"); }

SLOTはSIGNALより多くの引数を取ることができないと思うので、うまくいかないようです。この制限を回避するためのアプローチはありますか?

ありがとう。

4

2 に答える 2

3

Qt シグナル/スロット メカニズムは、同様のパラメータを持つスロット機能へのシグナルのみを転送できます。回避策として、 QSignalMapperを使用する必要があります。

QSignalMapper mapper;
...
connect(button1, SIGNAL(clicked()), &mapper, SLOT(map()));
mapper.setMapping(button1, button1); // not sure whether this is mandatory or not
...
connect(&mapper, SIGNAL(mapped(QWidget*)), this, SLOT(markClicked(QWidget*)));

関数markClicked

void MainWindow::markClicked(QWidget *widget) {
  QPushButton *button = qobject_cast<QPushButton*>(widget);
  button->setText("Clicked");
}
于 2012-09-27T09:13:17.760 に答える
1

これを行うもう 1 つの方法は、引数にデフォルト値を使用してから、sender() メソッドを使用することです


void markClicked(QPushButton *button = NULL);

それから:
connect(button1, SIGNAL(clicked()), this, SLOT(markClicked()));

と:

void MainWindow::markClicked(QPushButton *button) {
   if (button==NULL) { button = qobject_cast<QPushButton*>(sender()); }
    button->setText("Clicked");
}
于 2013-07-02T18:01:10.370 に答える