2009-08-29 8 views
1

設定ウィジェットを作成して、日付を選択できます。
QDate(int year、int month、int day)を使ってQDate-Constructorを呼び出すために3つのQLineEditsを作成するのは良いことではないので、「show calendar」-Buttonを押してたとえば、日付を選択することができます。
しかし、私はこのカレンダーを新しいウィンドウに表示したくないので、私はそれを "ポップアップ"(これを説明する方法はわかりません)として表示したいと思います。たとえば、OpenOffice -設定。
これを実装する方法はありますか?QCalendarWidgetを新しいウィンドウではなく「ポップアップ」として使用しますか?

答えて

2

、あなたはQDateEditを使用して検討していますか?これにより、ユーザーは残りのオペレーティングシステムと一貫性のある形式で日付を編集できます。

4

これはタイプポップアップカレンダーの例で、フォームのボタンを押すとカレンダーを表示する必要があります。このクラスは、コード内のどこでも再利用できます。この例では、これはmain関数で開始されます。別のオプションについては

/* 
    * 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

このソリューションは、本当にQCalendarWidgetであるため、質問に最も適したソリューションです – dlewin