Qt, QFontComboBox - sygnały

Qt, QFontComboBox - sygnały
GO
  • Rejestracja:prawie 11 lat
  • Ostatnio:minuta
  • Postów:148
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:

Kopiuj
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.

edytowany 1x, ostatnio: gogolon
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:9 minut
2

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

Ja bym oczekiwał czegoś takiego:

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

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
GO
Pierwszy raz robię comboboxa, nie wiem jak sobie z tym poradzić :D
gośćabc
bez przesady, żeby this przez ref :D
MarekR22
nadgorliwość :)
GO
  • Rejestracja:prawie 11 lat
  • Ostatnio:minuta
  • Postów:148
0

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

Kopiuj
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....

edytowany 2x, ostatnio: gogolon
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:9 minut
1

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

Kopiuj
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) {});

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.