2009-08-29 4 views
1

Je veux créer un Widget Paramètres, où je peux choisir une Date.
Parce qu'il n'est pas agréable de créer 3 QLineEdits pour appeler QDate-Constructor avec QDate (int année, int mois, int jour), je pensais que ce serait mieux si vous pouviez appuyer sur un bouton "show calendar" pour exemple, où vous pouvez choisir la date.
Mais je ne veux pas montrer ce calendrier dans une nouvelle fenêtre, je veux le montrer comme un "Pop-up" (je ne sais pas comment l'expliquer), que vous pourriez savoir par exemple de l'OpenOffice -Paramètres.
Vous avez une idée de la façon de l'implémenter?QCalendarWidget comme "Pop-up", pas comme nouvelle fenêtre?

Répondre

2

Pour une autre option, avez-vous pensé à utiliser QDateEdit? Cela permettra à vos utilisateurs d'éditer la date dans un format compatible avec le reste du système d'exploitation.

4

Ceci est un exemple d'un calendrier contextuel de type, vous devez afficher le calendrier lorsque vous appuyez sur le bouton du formulaire. Cette classe peut être réutilisée n'importe où dans votre code. Dans cet exemple, ceci est lancé dans la fonction principale.

/* 
    * DatePopup.h 
    * 
    * Created on: Aug 29, 2009 
    *  Author: jordenysp 
    */ 

#ifndef DATEPOPUP_H_ 
#define DATEPOPUP_H_ 

#include <QDialog> 
#include <QDate> 
class QCalendarWidget; 
class QDialogButtonBox; 
class QVBoxLayout; 

class DatePopup : public QDialog{ 
    Q_OBJECT 
public: 
    DatePopup(QWidget *parent=0); 
    QDate selectedDate() const; 

private: 
    QWidget *widget; 
    QCalendarWidget *calendarWidget; 
    QDialogButtonBox* buttonBox; 
    QVBoxLayout *verticalLayout; 

}; 

#endif /* DATEPOPUP_H_ */ 


/* 
* DatePopup.cpp 
* 
* Created on: Aug 29, 2009 
*  Author: jordenysp 
*/ 

#include <QtGui> 
#include "DatePopup.h" 

DatePopup::DatePopup(QWidget *parent) 
:QDialog(parent, Qt::Popup) 
{ 
    setSizeGripEnabled(false); 
    resize(260, 230); 
    widget = new QWidget(this); 
    widget->setObjectName(QString::fromUtf8("widget")); 
    widget->setGeometry(QRect(0, 10, 258, 215)); 

    verticalLayout = new QVBoxLayout(widget); 
    verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); 
    verticalLayout->setContentsMargins(0, 0, 0, 0); 

    calendarWidget = new QCalendarWidget(widget); 
    calendarWidget->setObjectName(QString::fromUtf8("calendarWidget")); 

    verticalLayout->addWidget(calendarWidget); 

    buttonBox = new QDialogButtonBox(widget); 
    buttonBox->setObjectName(QString::fromUtf8("buttonBox")); 
    buttonBox->setOrientation(Qt::Horizontal); 
    buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); 

    verticalLayout->addWidget(buttonBox); 

    QObject::connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); 
    QObject::connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); 
} 

QDate DatePopup::selectedDate() const{ 
    return calendarWidget->selectedDate(); 
} 




#include <QtGui> 
#include <QDate> 
#include <QApplication> 
#include "DatePopup.h" 
#include <iostream> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    DatePopup popup; 

    int result = popup.exec(); 
    if(result == QDialog::Accepted){ 
     QDate date = popup.selectedDate(); 
     std::cout<< date.year() <<std::endl; 
     std::cout<< date.month() <<std::endl; 
     std::cout<< date.day() <<std::endl; 
    } 

    return a.exec(); 
} 
+0

Cette solution est celle qui correspond le mieux à la question car c'est vraiment un QCalendarWidget qui est élevé – dlewin

Questions connexes