Z tego co wyczytałem to jest niemożliwe, jednak chciałbym aby funkcja slot wiedziała kto się do niej odnosi i na podstawie tego jaką opcję z instrukcji warunkowej wewnątrz tej funkcji ma wybrać.
Jeśli nie chcecie podać konkretnego rozwiązania to chociaż powiedzcie czy w C++ istnieje coś w rodzaju event.target z JavaScriptu lub jakiś inny sposób na osiągnięcie tego celu.
A teraz konkrety. Co chcesz do czego podłączyć i co ma się w związku z tym dziać?
Jeżeli chodzi o start i stop, to faktycznie nic im nie przekażesz, to tak zostały zadeklarowane.
Jeżeli dobrze domyślam się o co ci chodzi, to możesz zrobić coś takiego:
class MyTimer : public QTimer {
Q_OBJECT
public:
MyTimer(QObject* parent = 0) : QTimer(parent) { }
public slots:
void start(Whatever* who) {
if (we_like(who))
QTimer::start();
}
void start(Whatever* who, int msec) {
if (we_like(who))
QTimer::start(msec);
}
void stop(Whatever* who) {
if (we_like(who))
QTimer::stop();
}
};
– Dodane 04.09.2013 (Śr) 15:39 –
W C++ nie ma. Może być w jakiejś bibliotece wykorzystującej zdarzenia typu GTKmm i Qt (wtedy obsługa zdarzeń jest częścią biblioteki), ale w samym C++ nie ma czegoś takiego.
Metoda singleShot jest statyczna. “ShotTimer->singleShot(…)” jest bez sensu, bo wywołanie singleShot nie ma nic wspólnego z ShotTimer. Poprawne jest “QTimer::singleShot(…)”.
Mam nadzieję, że używasz Qt5 i C++11
class ShotTimer : public QObject
{
Q_OBJECT
QTimer *timer;
OknaKlasa *target;
int value;
public:
ShotTimer(int delay, OknaKlasa *t, int v) : QObject(), target(t), value(v) {
timer = new QTimer(this);
timer->setSingleShot(true);
connect(timer, &QTimer::timeout, [this]() {
emit target->mielenie(value);
delete this;
});
timer->start(delay);
}
};
błąd:no matching function for call to 'ShotTimer::connect(QTimer*&, void (QTimer::*)(QTimer::QPrivateSignal), ShotTimer::ShotTimer(int, OknaKlasa*, int)::)'