需要加包。
可以先导入外部包,这种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()问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)