1

そのため、QPushButton オブジェクトを動的に作成し、それらをマッピングして信号を発信しています。信号に関連付けられたスロットから、オブジェクトのプロパティ (この場合は QPushButton::text() であるテキスト) を編集します。

私が持っているヘッダーファイルのクラス「ダイアログ」で:

private:
QSignalMapper *signalMapper;

private slots:
    void buttonGeneric(QPushButton &button);

signals:
    void clicked(QPushButton &button);

.cpp ファイルの「ダイアログ」クラスのコンストラクターには、次のものがあります。

signalMapper = new QSignalMapper(this);

for (int i = 0; i < 100; ++i)
{
    QPushButton *button = new QPushButton(QString::number(i + 1));
    connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
    signalMapper->setMapping(button, button);
    ui->gridLayout->addWidget(button, 2 + (i / 10), (i % 10));
}
connect(signalMapper, SIGNAL(mapped(QPushButton &button)), this, SIGNAL(clicked(QPushButton &button)));
connect(this, SIGNAL(clicked(QPushButton &button)), this, SLOT(buttonGeneric(QPushButton &button)));

そして最後に、私が持っている同じ .cpp ファイルのコンストラクターの外側:

void dialog::buttonGeneric(QPushButton & button)
{
   button.setText("hello");
}

このコードはコンパイルおよび実行されますが、ボタンをクリックしても何も起こりません。アプリケーションのデバッグ出力では、次のようになります。

QObject::connect: No such signal QSignalMapper::mapped(QPushButton &button)
QObject::connect:  (receiver name: 'dialog')
QObject::connect: No such signal dialog::clicked(QPushButton &button)
QObject::connect:  (sender name:   'dialog')
QObject::connect:  (receiver name: 'dialog') 

繰り返しますが、クリックされたボタンのテキストを新しいものに変更しようとしています。これどうやってするの?

前もって感謝します。

4

1 に答える 1

0

QSignalMapper信号がありませんmapped(QPushButton&)。ただしmapped(QWidget*)、プッシュボタンに対して発行される があります。したがって、この信号に接続する必要があります(それに応じてダイアログ信号とスロットを変更します)。

于 2013-05-10T16:56:25.057 に答える