qdatetimeedit 需要加包吗

qdatetimeedit 需要加包吗,第1张

需要加包。

可以先导入外部包,这种qdatetimeedit只是与jar包的绝对路径建立链接,并不会拷贝到项目中。

qdatetimeedit包名称前面的图标会有区别。另外,如果jar包名称前面的图标出现**叹号,说明这个jar的路径有问题,需重新导入。

委托类和变量

DateDelegate m_dateDelegate;

    ComboDelegate m_comboDelegate;

    SpinDelegate m_spinDelegate;

    CheckBoxDelegate m_CheckBoxDelegate;

//ttableview添加委托

m_modle = new QStandardItemModel(this);

    setModel(m_modle);

    m_modle->setColumnCount(6);

    m_modle->setHeaderData(0,Qt::Horizontal,"Name");//

    m_modle->setHeaderData(1,Qt::Horizontal,"Birthday");

    m_modle->setHeaderData(2,Qt::Horizontal,"Job");

    m_modle->setHeaderData(3,Qt::Horizontal,"Income");

    m_modle->setHeaderData(4,Qt::Horizontal,"yes1");

    m_modle->setHeaderData(5,Qt::Horizontal,"yes2");

    this->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    setItemDelegateForColumn(1, &m_dateDelegate);

    setItemDelegateForColumn(2, &m_comboDelegate);

    setItemDelegateForColumn(3, &m_spinDelegate);

    setItemDelegateForColumn(4, &m_CheckBoxDelegate);//双击或选中才能显示,不使用

    m_modle->setItem(0,0, new QStandardItem("Tom"));

    m_modle->setItem(0,1, new QStandardItem("1977-01-05"));

    m_modle->setItem(0,2, new QStandardItem("工人"));

    m_modle->setItem(0,3, new QStandardItem("1500"));

    //m_modle->indexFromItem()

    setIndexWidget(m_modle->index(0, 5), new QCheckBox(this));

//类原形

#ifndef DATEDELEGATE_H

#define DATEDELEGATE_H

#include

#include

class DateDelegate : public QItemDelegate

{

  Q_OBJECT

public:

    DateDelegate(QObject parent = 0) :  QItemDelegate(parent) {}

    QWidget createEditor(QWidget parent, const QStyleOptionViewItem &option, const QModelIndex &index) const

    {

        QDateTimeEdit editor = new QDateTimeEdit(parent);

        editor->setDisplayFormat("yyyy-MM-dd");

        editor->setCalendarPopup(true);

        editor->installEventFilter(const_cast(this));

        return editor;

    }

    void setEditorData(QWidget editor, const QModelIndex &index) const

    {

        QString dateStr= indexmodel()->data(index)toString();

        QDate date = QDate::fromString(dateStr,Qt::ISODate);

        QDateTimeEdit edit=static_cast(editor);

        edit->setDate(date);

    }

    void setModelData(QWidget editor, QAbstractItemModel model, const QModelIndex &index) const

    {

        QDateTimeEdit edit=static_cast(editor);

        QDate date = edit->date();

        model->setData(index,QVariant(datetoString(Qt::ISODate)));

    }

    void updateEditorGeometry(QWidget editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

    {

        editor->setGeometry(optionrect);

    }

};

#endif // DATEDELEGATE_H

#ifndef COMBODELEGATE_H

#define COMBODELEGATE_H

#include <QComboBox>

#include <QItemDelegate>

class  ComboDelegate :  public  QItemDelegate

{

    Q_OBJECT

public :

    ComboDelegate(QObject parent = 0): QItemDelegate(parent) { }

    QWidget createEditor(QWidget parent,  const QStyleOptionViewItem &option,

        const  QModelIndex &index)  const

    {

        QStringList list;

        list << "工人" << "农民" << "军人" << "律师";

        QComboBox editor = new QComboBox(parent);

        editor->addItems(list);

        editor->installEventFilter(const_cast(this));

        return editor;

    }

    void  setEditorData(QWidget editor,  const  QModelIndex &index)  const

    {

        QString dateStr = indexmodel()->data(index)toString();

        QComboBox box = static_cast(editor);

        int i = box->findText(dateStr);

        box->setCurrentIndex(i);

    }

    void  setModelData(QWidget editor, QAbstractItemModel model,

        const  QModelIndex &index)  const

    {

        QComboBox box = static_cast(editor);

        QString str = box->currentText();

        model->setData(index,str);

    }

    void  updateEditorGeometry(QWidget editor,

        const  QStyleOptionViewItem &option,  const  QModelIndex &index) const

    {

        editor->setGeometry(optionrect);

    }

};

#endif // COMBODELEGATE_H

#ifndef SPINDELEGATE_H

#define SPINDELEGATE_H

#include

#include

class SpinDelegate : public QItemDelegate

{

    Q_OBJECT

public:

    SpinDelegate(QObject parent = 0) : QItemDelegate(parent){}

    QWidget createEditor(QWidget parent, const QStyleOptionViewItem &option, const QModelIndex &index) const

    {

        QSpinBox editor = new QSpinBox(parent);

        editor->setRange(0,10000);

        editor->installEventFilter(const_cast(this));

        return editor;

    }

    void setEditorData(QWidget editor, const QModelIndex &index) const

    {

        int value =indexmodel()->data(index)toInt();

        QSpinBox box = static_cast(editor);

        box->setValue(value);

    }

    void setModelData(QWidget editor, QAbstractItemModel model, const QModelIndex &index) const

    {

        QSpinBox box = static_cast(editor);

      int value = box->value();

      model->setData(index,value);

    }

    void updateEditorGeometry(QWidget editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

    {

        editor->setGeometry(optionrect);

    }

};

#endif // SPINDELEGATE_H

#ifndef CHECKBOXDELEGATE_H

#define CHECKBOXDELEGATE_H

#include

#include

class CheckBoxDelegate : public QItemDelegate

{

    Q_OBJECT

public:

    CheckBoxDelegate(QObject parent = 0) : QItemDelegate(parent){}

    QWidget createEditor(QWidget parent, const QStyleOptionViewItem &option, const QModelIndex &index) const

    {

        QCheckBox editor = new QCheckBox(parent);

        editor->installEventFilter(const_cast(this));

        return editor;//双击或选中才能显示

    }

    void setEditorData(QWidget editor, const QModelIndex &index) const

    {

        bool value =indexmodel()->data(index)toBool();

        QCheckBox box = static_cast(editor);

        box->setChecked(value);

    }

    void setModelData(QWidget editor, QAbstractItemModel model, const QModelIndex &index) const

    {

      QCheckBox box = static_cast(editor);

      bool value = box->isChecked();

      model->setData(index,value);

    }

    void updateEditorGeometry(QWidget editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

    {

        editor->setGeometry(optionrect);

    }

};

#endif // CHECKBOXDELEGATE_H

你只修改了 Qt::EditRole 角色中的数据, 但是没有修改 相应 Qt::DisplayRole 角色中的数据, 所以正常模式下数据还是原来的数据, 编辑模式下应该是你刚输入的值。 如果调不出来的话,可以把完整的代码发给我看看(如果方便的话)

delphi TDate,Time存储方式本质上也是以double来存储的。用整数部分表示日期,小数部分表示时间。TDateTimePicker有上面三种属性。

二、

delphi TDateTimePicker的kind属性设置为dtkDate用于显示日期,第二个kind设置为dtkTime用于显示时间,但是不能同时显示的。

三、用DateTimePickerDate和Time的值要注意:取Date要用trunc取整得到,取Time要用frac取小数得到。

四、DateTimePicker的Date,Time,DateTime三者是相等的。

新建一个工程放入一个TDateTimePicker、两个TEdit、两个按钮,并设置两个按钮的事件代码如下

{DateTimePicker1的日期和时间设置为:2010-03-26 13:00:00}

procedure TForm1Button1Click(Sender: TObject); //取出Date部分,并判断它的值

var

t:TDateTime;

begin

t:= DateTimePicker1Date;

Edit1Text:=DateTimeToStr(t);

end;

procedure TForm1Button2Click(Sender: TObject); //判断取Date和DateTime是否相等

begin

if DateTimePicker1Time = DateTimePicker1DateTime then

begin

Edit2Text:='相等'

end

else

begin

Edit2Text:='不相等';

end;

end;

可以看到虽然我们的代码中只取了Date或是Time,但是它们的值和DateTime的值是相等的。

所以如果你用如下代码

{DateTimePicker1的日期和时间设置为:2010-03-26 13:00:00}

procedure TForm1Button1Click(Sender: TObject); //取出Date部分,并判断它的值

var

t:TDateTime;

begin

t:= DateTimePicker1Date + DateTimePicker1Time;

//t:= trunc(DateTimePicker1Date)+frac(DateTimePicker1Time);//这才是等到DateTimePicker1的日期和时间

Edit1Text:=DateTimeToStr(t);

end;

结果是:2120-6-21 2:00:00

相当于是把DateTimePicker1的时间和日期乘以2了,并不是说DateTimerPicker的Date+Time就和DateTime相等。

而用 trunc取整数部分 加上 frac取小数部分 函数,两者取出来的和就会和原来相等。

在默认情况下,如果QDateTimeEdit类构造时不指定日期时间,那么系统会为其设置一个和本地相同的日期时间格式,并且值为2000年1月1日0时0分0秒,也可以手动指定控件显示的日期时间。除了通过构造函数指定所显示的日期时间外,也可以根据QDateTimeEdit提供的槽函数来设置。

它允许用户通过鼠标或键盘选择日期,默认选中的是今日的日期。也可以对日期的范围进行规定。

string strNowyyyyMM = DateTimeNowToString("yyyy-MM");

DateTime dtNow = ConvertToDateTime(strNowyyyyMM);

DateTime dtLast = dtNowAddMonths(-1);

int LastMonth = dtLastMonth;

MessageBoxShow(LastMonthToString ());

DateEdit 能够显示日期+时间

设置以下属性

dateEdit1PropertiesVistaDisplayMode=DevExpressUtilsDefaultBooleanTrue;

dateEdit1PropertiesVistaEditTime = DevExpressUtilsDefaultBooleanTrue;

设置显示长日期模式(日期+时间):

dateEdit1PropertiesDisplayFormatFormatString="g"

dateEdit1PropertiesDisplayFormatFormatType=DateTime

dateEdit1PropertiesEditFormatFormatString="g"

dateEdit1PropertiesEditFormatFormatType=DateTime

设置为Vista模式时,如果要显示日期+时间的长日期模式,还需要设置:

VistaTimePropertiesDisplayFormat

VistaTimePropertiesEditFormat

以上就是关于qdatetimeedit 需要加包吗全部的内容,包括:qdatetimeedit 需要加包吗、QTableview 委托例子、QT的Model的setData()问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9350522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存