Друзья! Помогите реализовать QDateTimeEdit со встроеным CheckBox, который отключал и включал бы ввод даты.
Как в прочих языках есть такая штука:
Казалось бы - наследуй QDateTimeEdit и вставляй туда чекбокс, да есть проблемы -
а именно в такой реализации внутренние части QDateTimeEdit не меняют своего размера.
Помогите решить проблему, пожалуйста!текущий размер беды:
UDateEdit.h
#ifndef UDATEEDIT_H
#define UDATEEDIT_H
#include <QDateTimeEdit>
class QCheckBox;
class UDateEdit : public QDateTimeEdit
{
Q_OBJECT
public:
UDateEdit(QWidget *parent = 0);
protected:
void resizeEvent(QResizeEvent *);
private:
QCheckBox *chkCheck;
};
#endif // UDATEEDIT_H
UDateEdit.cpp
#include "UDateEdit.h"
#include <QCheckBox>
#include <QStyle>
UDateEdit::UDateEdit(QWidget *parent)
: QDateTimeEdit(parent)
{
chkCheck = new QCheckBox(this);
chkCheck->setCursor(Qt::ArrowCursor);
chkCheck->setGeometry(QRect(2, 2, 16, 16));
chkCheck->show();
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
setStyleSheet(QString("QDateEdit { padding-left: %1px; } ").arg(chkCheck->width() + frameWidth + 1));
QSize msz = minimumSizeHint();
setMinimumSize(qMax(msz.width(), chkCheck->sizeHint().height() + frameWidth * 2 + 2),
qMax(msz.height(), chkCheck->sizeHint().height() + frameWidth * 2 + 2));
}
void UDateEdit::resizeEvent(QResizeEvent *)
{
QSize sz = chkCheck->sizeHint();
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
chkCheck->move(frameWidth,
(rect().bottom() + 1 - sz.height())/2);
}