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.

Je suis curieux de savoir ce que votre cas d'utilisation pour cette. Une fois que vous affichez, permettra à l'utilisateur de toujours être prévu pour interagir avec elle? Pourquoi ne pas afficher un QCalendarWidget par lui-même?
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