Qt - QDateEdit

0

mam taki kawałek kodu który wyświetla kalendarz jako listę rozwijaną

    DateEdit = new QDateEdit(QDate::currentDate());
    QObject::connect(DateEdit, SIGNAL(dateChanged(const QDate &date)), DateEdit, SLOT(dateChanged(const QDate &date)));
    DateEdit->setCalendarPopup(true);
    DateEdit->setFixedHeight(35);
    DateEdit->setDisplayFormat(QString("dd-MMMM-yyyy"));

Chciałbym teraz móc pobierać wybraną datę z kalendarza, co trzeba zrobić ? Sądzę, że za pomocą slota to jest dobry pomysł ale niestety mi nie działa. Co robię źle ?

0

już swój problem rozwiązałem.
Nie rozumiem czemu zmienili zapis connecta ? Stary był czytelniejszy i bardziej zrozumiały, bo wiadomo było co skąd idzie...

no więc tak.

miałem błąd typu

QObject::connect: No such signal QDateEdit::userDateChanged(const QDate &date)

co trzeba zrobić ? zamiast używać starego zapisu connecta

QObject::connect(DateEdit, SIGNAL(userDateChanged(const QDate &date)), this, SLOT(myDate(const QDate &date)));

to trzeba użyć nowego zapisu connecta i jest on poniżej

QObject::connect(DateEdit, &QDateEdit::userDateChanged, this, &MainWindow::myDate);

I działa doskonale

Gdyby ktoś był zainteresowany jak pobrać datę którą user wybrał z tej kontrolki to trzeba sobie napisać slota np tak:

        inline void myDate(const QDate &date){
        qDebug()<<"dzien"<<date.day();
        qDebug()<<"miesiac"<<date.month();
        qDebug()<<"rok"<<date.year();
    }
1

Działa nadal, chociażby z powodu kompatybilności wstecznej. Po prostu popełniłeś błąd w zapisie, tak powinno to wyglądać:

QObject::connect(DateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(dateChanged(const QDate&)));

ponadto na pewno nie chciałeś podpiąć sygnału do samego siebie :] dlatego dałem this jako cel sygnału.
w makrach SIGNAL/SLOT podajesz tylko typy parametrów sygnału i slotu, bez ich dokładnej nazwy. Obczaj dokumentację na temat QObject::connect()

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