В вашем слоте вы должны иметь возможность вызывать функцию sender()
, которая будет возвращать указатель на объект, испустивший сигнал (если это произошло ... помните, вы можете вызывать слоты так же, как функцию ). Это быстрый, относительно простой и небрежный способ. Однако это нарушает инкапсуляцию.
Немного лучшим способом было бы обеспечить механизм нумерации для кнопок и использовать QSignalMapper
для сопоставления отдельных кнопок в один сигнал, который содержит int для кнопки, на которую нажали.
Это на C ++ (с которым я более знаком):
QSignalMapper *mapper = new QSignalMapper( this );
connect( mapper, SIGNAL( mapped( int ) ), SLOT( MyFancyFunction( int ) ) );
// Do this for each button:
mapper->connect( button1, SIGNAL( clicked() ), SLOT( map() ) );
mapper->setMapping( button1, FIRST_TOOL )
Тогда:
void MyFancyFunction( int option )
{
switch ( option )
{
case FIRST_TOOL: // do whatever...
}
}