0

信号に 3 つのボタンのスロットを割り当てたい。

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QSignalMapper *signalmapper;
    Ui::MainWindow *ui;
    void test(int);

signals:
    void clickmee(int);

public slots:
    void setclick1(int);
    void setclick2(int);
    void setclick3(int);
};

私はコンストラクタでこれを行います:

signalmapper = new QSignalMapper(this);
signalmapper->setMapping(ui->pushButton, 10);
signalmapper->setMapping(ui->pushButton1, 10);
signalmapper->setMapping(ui->pushButton1, 10);
connect(signalmapper, SIGNAL(mapped(int)),this,SLOT(clickmee(int)));

しかし、私が書いたプログラムを実行すると:

QObject::connect: No such slot MainWindow::clickmee(int) in ..\Qsignal2\mainwindow.cpp:11 QObject::connect: (レシーバー名: 'MainWindow')

signal にスロットを割り当てるにはどうすればよいですか? パラメータをスロットに送信するにはどうすればよいですか?

編集:私はこれをしたい:

void  setclick1(int x)
{
    if(x== 10)
    {
        // ....
    }
    else
    {
        // ...
    }
}

しかし、この関数は起動しません。どうやってやるの?

4

1 に答える 1

0

試してみてください

connect(signalmapper, SIGNAL(mapped(int)),this, SIGNAL(clickmee(int)));

これが Qt4 または Qt5 でまだ許可されているかどうかはわかりませんが、Qt3 では有効でした。シグナル signalmapper.mapped(x) を this.clickmee(x) に再送信するだけです。

これが機能しない場合は、おそらく実際のスロットを作成し、それを signalamaper.mapped に接続して、そこでクリックミーを発行する必要があります。このようなもの:

public slots:
 void clickmee_slot(int x) {
  emit clickmee(x);
 }

そしてコンストラクターで:

connect(signalmapper, SIGNAL(mapped(int)),this, SLOT(clickmee_slot(int)));
于 2013-04-23T19:30:22.740 に答える