2016-01-27 3 views
0

Я хочу перегружать SLOT Qt либо реагировать на излучаемый clicked()SIGNAL из QPushButton или stateChanged(int) сигнала от QCheckBox (так как нет никакого сигнала, который излучает, когда флажок установлен только) ,Как отобразить перегружать Qt слот

Так что это мои два SLOT.

void Widget::sendCom(QString data) 
{ 
    std::cout << "In scope of sendCom"<< std::endl; 
} 
void Widget::sendCom(QString data, int state) 
{ 
    std::cout << "In scope of overloaded sendCom: " << std::endl; 
} 

С widget->createButton(SLOT(sendCom(QString), data); я называю следующее и отображение работает отлично.

void Widget::createButton(const char *member, QString &data) 
{ 
    QPushButton *button = new QPushButton(this); 
    signalMapper = new QSignalMapper(this); 
    signalMapper->setMapping(button, data); 
    connect(signalMapper, SIGNAL(mapped(QString)), this, member); 
    connect(button, SIGNAL(clicked()), signalMapper, SLOT(map())); 
    ... 
} 


void Widget::createCheckBox(const char *member, QString &data) 
{ 
} 

с widget->createCheckBox(SLOT(QString, int), data) я хочу передать в состоянии ChechBox к перегруженной Widget::sendCom(QString data, int state), а также. Как должно выполняться сопоставление?

ответ

2

В соответствии с документацией QSignalMapper управляет безпараметрическими сигналами. Вы можете получить новый класс от QCheckBox, где вы подключаете stateChanged(int) SIGNAL к соответствующему слоту в классе, где вы испускаете setChecked() или setUnchecked() SIGNAL, который может обрабатываться QSignalMapper.

+0

Это может быть наиболее эффективным способом. Я думал о том, чтобы идентифицировать отправителя и получить состояние через 'setCheckState' с помощью dynamic_cast – tobilocker

+0

Реализовано как предложено. Работает как шарм. – tobilocker

+0

Рад это услышать и поблагодарить за отзыв. – hmuelner

Смежные вопросы