Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Urvin от Июнь 05, 2008, 17:22



Название: [Qt4] QDateTimeEdit c CheckBox-ом, помогите реализовать
Отправлено: Urvin от Июнь 05, 2008, 17:22
Друзья! Помогите реализовать QDateTimeEdit со встроеным CheckBox, который отключал и включал бы ввод даты.
Как в прочих языках есть такая штука:
(http://img526.imageshack.us/img526/6866/qt2cx6.png)

Казалось бы - наследуй 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);
}


Название: Re: [Qt4] QDateTimeEdit c CheckBox-ом, помогите реализовать
Отправлено: kolob от Ноябрь 29, 2011, 23:38
Тема давно устарела, но резултата так и не кто не написал.
Я установил отступ в lineEdit и поэтому дата отображается правее checkBox-а. А checkBox кинел в лэйаут.
ТОлько теперь с фокусом проблема.
Может кто то уже решил, отпишитесь кто знает как решить проблему.