QDateEdit calendrier popup
Je vais essayer d'obtenir un QDateEdit
pour permettre à l' QCalendarWidget
à montrer sur demande (plutôt que de simplement en cliquant sur la flèche vers le bas). Par exemple, quelque part dans ma classe, je devrais être capable de dire:
ui.datepicker.showCalendar()
et il devrait charger le calendrier qui s'affiche juste en dessous du sélecteur de date.
Il semble que j'ai besoin de sous-classe QDateEdit
, comme cela ne fonctionne pas:
QDateEdit *de = new QDateEdit();
de->calendarWidget()->show();
J'ai aussi essayé d'envoyer des commandes au clavier comme dicté quand vous passez par la QDateTimeEdit.cpp source de Qt, mais il semble que mon raccourcis clavier sont désactivés ou quelque chose.
Toutes les idées sur ce que j'ai à faire à la sous-classe pour obtenir que cela fonctionne? Je pensais à quelque chose comme:
class MyDateEdit : QDateEdit
{
Q_OBJECT
protected:
void mouseEvent(QEvent *event) {
this.calendarWidget().show();
}
};
Mais hélas! qui ne semble pas à compiler dans ou de travailler correctement.
Le cas d'utilisation est que je voudrais pour obliger l'utilisateur à utiliser l'qcalendarwidget que la seule manière de fixer la date, mais je ne veux pas le calendrier toujours indiqué (pour économiser de l'espace) - il ne devrait montrer une fois qu'ils cliquent sur le QDateEdit (ou peut-être un QLabel si c'est une meilleure option), et ensuite se cacher une fois qu'ils cliquent ailleurs ou sélectionner une date.
Oh, si vous voulez la QDateEdit de ne pas être modifiable directement et le QCalendarWidget à afficher lorsqu'une partie de la QDateEdit est cliqué (et pas seulement la flèche vers le bas)?
Idéalement oui, mais je serais d'accord avec le QDateEdit être modifiable ou à l'aide d'un QLabel ou une autre solution - l'essentiel est que onFocus, le calendrier est affiché, plutôt que de cliquer sur la flèche vers le bas.
Idéalement, si vous voulez changer le comportement d'un widget, vous devez sous-classe du widget et les remplacer au besoin. Si quoi que ce soit, ce résultat sera une meilleure encapsulation, mais dans ce cas, c'est probablement la seule option. La navigation sur le code source sera susceptible de vous donner les conseils dont vous avez besoin.
OriginalL'auteur Rob S | 2011-08-11
Vous devez vous connecter pour publier un commentaire.
Activer "setCalendarPopup ( bool activer )" dans QDateTimeEdit permet de faire apparaitre le calendrier
QDateEdit *de = new QDateEdit();
etde->setCalendarPopup(true);
je suppose que c'est tout ce dont vous avez besoin?Oui c'est la bonne manière.
merci pour la confirmation 🙂 fonctionne très bien
OriginalL'auteur Sevendyne
J'ai été en mesure de le comprendre sur mon propre toujours pas sûr de savoir comment obtenir QDateEdit fonctionne correctement, mais j'ai utilisé un QLineEdit et il adapté à mes besoins. Il suffit de connecter QCalendarWidget "onClick(QDate)" une fente de vous créer un:
Puis ajouter un filtre d'événement à la QLineEdit à l'aide de la "OnFocusIn" événement qui ne une "ui->calendrier->show ();", Voir: Obtenir une notification d'événement/signaler quand un widget Qt obtient le focus
OriginalL'auteur Rob S
@Rob S réponse
Vous étiez à droite avec le filtre d'événements approche nous permettrait de faire de même avec QDateEdit.
Je suis en train d'écrire le code qui s'étend à votre approche avec QDateEdit :
Dans mainwindow.h j'ai créé un QCalendar pointeur (à l'Aide de QtCreator)
Voici le code de mainwindow.cpp (je donne fullcode de sorte que les novices comme moi, de prestation en nature)
Assurez-vous de définir buttonSymbol et calendarpopup valeur false à la propriété pour le faire fonctionner correctement
OU :: Sinon, nous pouvons utiliser QCalendarWidget fournis par dateEdit, bien que son pas beaucoup plus efficace que de turing à Popup mess avec son intérieur. Donner un coup de feu si vous voulez
OriginalL'auteur Dr. Xperience