Russian Qt Forum
Ноябрь 24, 2024, 13:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt4] QDateTimeEdit c CheckBox-ом, помогите реализовать  (Прочитано 3606 раз)
Urvin
Гость
« : Июнь 05, 2008, 17:22 »

Друзья! Помогите реализовать 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);
}
« Последнее редактирование: Июнь 05, 2008, 17:23 от Urvin » Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #1 : Ноябрь 29, 2011, 23:38 »

Тема давно устарела, но резултата так и не кто не написал.
Я установил отступ в lineEdit и поэтому дата отображается правее checkBox-а. А checkBox кинел в лэйаут.
ТОлько теперь с фокусом проблема.
Может кто то уже решил, отпишитесь кто знает как решить проблему.
Записан

Qt 5.11.0, Win, MinGW
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.