Qt, QFontComboBox - sygnały

0

Witam.
Chciałbym sprawić, by po zmienieniu czcionki w QFontCombox'ie zmieniała się czcionka w polu tekstowym. Spróbowałem użyć do tego lambda i funkcji connect:

connect(fontBox, fontBox->currentFontChanged(fontBox->currentFont(), [=]() {editor->setFont(fontBox->currentFont());});

Mógłby mi ktoś wytłumaczyć, dlaczego to nie działa i do czego potrzebny jest parametr w slocie currentFontChanged? Pokazuje się błąd invalid use of void expression.

2

ten connect jest zupełnie bezsensu! To się kompiluje?
Nawet nawiasy mi się nie zgadzają!

Ja bym oczekiwał czegoś takiego:

connect(fontBox, &QFontCombox::currentFontChanged,
        [this](const QFont & font) { 
            editor->setFont(font);
        });
0

Dzięki, działa. Ale w takim razie dlaczego nie mogę zrobić np tak:

connect(fontSizeBox, &QComboBox::currentIndexChanged, [this](const QString &txt) {});

mam przy tym błąd no matching function to call [...], unresolved overloaded function type
Sygnał currentIndexChanged jest przeładowany, i z tego, co rozumiem, kompilator nie wiem, której "wersji" funkcji chcę użyć? To trochę bez sensu, przecież w nawiasie jest wyraźnie napisane, że chcę użyć przeładowania z QString'iem w argumencie....

1

to jest już problem z szablonami i domyślaniem się jaki jest argument szablonu.
Najlepiej rozwiązać to tak:

void (QComboBox::*indexChangeSignal)(const QString &txt) = &QComboBox::currentIndexChanged;
connect(fontSizeBox, indexChangeSignal, 
        [this](const QString &txt) {});

// albo ze static cast:
connect(fontSizeBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), 
        [this](const QString &txt) {});

1 użytkowników online, w tym zalogowanych: 0, gości: 1