すべてのボタンをパラメーターなしでスロットに接続し、次の手順で送信者の位置を取得できます。
QObject
送信者を QWidget にキャストするqobject_cast
QWidget
を使用してそのインデックスを取得しますQLayout::indexOf(QWidget *widget)
- 次に、行、列、列スパン、および行スパンを取得します
QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan)
サンプル コードは次のようになります。
void MyWidgetWithAllLabels::commonSlot()
{
QWidget *buttonWidget = qobject_cast<QWidget*>(sender());
if (!buttonWidget)
return;
int indexOfButton = ui->gridLayout->indexOf(buttonWidget);
int rowOfButton, columnOfButton, rowSpanOfButton, columnSpanOfButton;
ui->gridLayout->getItemPosition(indexOfButton,
&rowOfButton, &columnOfButton, &rowSpanOfButton, &columnSpanOfLabel);
// Now you can get a reference to that specific QPushButton
QLayoutItem *item = ui->gridLayout->itemAtPosition(rowOfButton, columnOfButton);
QPushButton *clickedButton = qobject_cast<QPushButton*>(item->widget());
if (!clickedButton)
return;
// ... do something with that clickedButton
}
関連する投稿のコードを参照すると、次のようにボタンをそのスロットに接続できます。
connect( ui->tile_0_0, SIGNAL(clicked()),
this, SLOT(commonSlot()));
connect( ui->tile_0_1, SIGNAL(clicked()),
this, SLOT(commonSlot()));
// ...