Qt - sygnały i sloty

0

Zrobiłem sobie takie okno do wyszukiwania danych za pomocą kryteriów

screenshot-20191118150823.png

i chciałbym zrobić to w taki sposób:

  • jak wybiorę np datę i kliknę przycisk "szukaj" to program wyszuka mi po dacie ale zignoruje listę rozwijaną,
  • jak wybiorę coś z listy rozwijanej i kliknę przycisk "szukaj" to wyszuka mi dane na podstawie tego co zaznaczyłem z listy rozwijanej i zignoruje pole z datą.

Poniżej jest checkbox który służy do tego, że jak go zaznaczę, to kryteria wyszukiwania się zmienią i będę mógł wybrać wszystkie kryteria na raz tj. datę i listę rozwijaną i użyć tego do wyszukania danych.

Pytanie jest takie. Czy da się coś takiego osiągnąć ? Jeżeli tak, to w jaki sposób ?

0

Czy się da? Oczywiście, że tak.
Jak? Nie mam pojęcia!
Zadałeś pytanie na tak wysokim poziomie ogólności i bez nawet linijki kodu, że wątpię czy ktoś będzie w stanie pomóc.

0

W klasie która używa pokazany kawałek UI robisz slot do którego podpinasz sygnały void QComboBox::activated(int index) oraz void QDateTimeEdit::dateTimeChanged(const QDateTime &datetime). Ponadto klasa owa powinna zawierać flagę bool która będzie oznaczać, czy ostatnio użyto dajmy na to combo boxa. Slot będzie wyglądał jakoś tak

void YourClass::listOrDateEdit()
{
   QObject *o = sender();
   if (o == ui->comboBox)
   {
      comboBoxUsed = true;
   }
   else if (o == ui->dateTimeEdit)
   {
      comboBoxUsed = false;
   }
   //pozostaje rozkminić co zrobić w sytuacji, kiedy slot nie został wywołany ani przez comboboxa, ani przez kalendarz
}

i teraz, w slocie do którego masz podpięty sygnał clicked() przycisku szukaj sprawdzasz stan flagi:

void YourClass::onSearchButtonClicked()
{
    if (comboBoxUsed)
    {
         //ścieżka wykonania dla przypadku kiedy wybrano coś z listy
    }
    else
    {
       //ścieżka wykonania dla przypadku kiedy wybrano datę w kalendarzu
    }
}

O ile mnie pamięć nie myli przy kalendarzu jest mała pułapka polegająca na tym, że jak się wybierze dokładnie taką samą datę i czas jak są już w kontrolce nastawione to sygnał informujący o zmianie nie jest wysyłany. Ale, to już sam obadaj.

0

A nie lepiej po prostu zrobić checkboxa na każdy filtr i w slocie docelowym sprawdzać który jest "aktywny" a który nie?
Bo jeśli ustawię datę a później się rozmyślę to jak "powiedzieć" programowi żeby wyszukiwania po dacie nie brał pod uwagę?

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