qspinbox 和qdateTimeEdit

目录(?)[+]

继承关系如下:

默认外观分别如下(win7,与上述顺序对应):


可看出,都是由一个可编辑的文本框及右端小箭头组成

————————————————————————————————————————————————————————————

QAbstractSpinBox

属性简单解释如下:

Properties

公有函数如下:

[cpp]  view plain  copy
  1.     QAbstractSpinBox(QWidget * parent = 0)  
  2.     ~QAbstractSpinBox()  
  3. //下方为设置部分  
  4. void    setAccelerated(bool on)//设置加速开关,默认关。开启时,长按右端小箭头,值的增大速度由慢变快,适合值的大范围变化  
  5. void    setAlignment(Qt::Alignment flag)//对齐方式,默认左对齐,参数枚举型,有 Qt::AlignLeft, Qt::AlignRight, 和 Qt::AlignHCenter.  
  6. void    setButtonSymbols(ButtonSymbols bs)//右方上下箭头样式,默认图中的样式,也可以是加减号,可选枚举值见下方  
  7. void    setCorrectionMode(CorrectionMode cm)//纠正模式,用户输入非法字符时调用,有恢复前一值及取一个最接近的值,默认前者,枚举值见下方  
  8. void    setFrame(bool)  
  9. void    setKeyboardTracking(bool kt)//按键追踪,默认true,此时,当用户输入的值变化时,信号valueChanged()不断发出,false时,失去焦点或点击箭头时才发出  
  10. void    setReadOnly(bool r)//只读,不可编辑  
  11. void    setSpecialValueText(const QString & txt)//设置一个特殊值,经实验,当设置一个变化值0-100,变化时,当最后值为0时,却不显示0,而显示这个txt,用于让应用程序判断哪个值合适……  
  12. void    setWrapping(bool w)//设置循环,值增长到最大时,自动跳到最小值,返之亦然  
  13. //下方为取值部分,与上述对应  
  14. bool    isAccelerated() const  
  15. Qt::Alignment   alignment() const  
  16. ButtonSymbols   buttonSymbols() const  
  17. CorrectionMode  correctionMode() const  
  18. bool    hasFrame() const  
  19. bool    keyboardTracking() const  
  20. bool    isReadOnly() const  
  21. QString specialValueText() const  
  22. bool    wrapping() const  
  23. //其它功能  
  24. QString text() const//取得文本框内所有字符  
  25. bool    hasAcceptableInput() const  
  26. void    interpretText()  
  27. virtual void    fixup(QString & input) const  
  28. virtual void    stepBy(int steps)  
  29. virtual QValidator::State   validate(QString & input, int & pos) const//用于判断输入是否满足正则,用于被重载  

按钮样式枚举值:enum QAbstractSpinBox::ButtonSymbols


QAbstractSpinBox::UpDownArrows 0 上下箭头
QAbstractSpinBox::PlusMinus 1 +与-
QAbstractSpinBox::NoButtons 2 不显示
纠正模式枚举值:enum QAbstractSpinBox::CorrectionMode
Constant Value Description
QAbstractSpinBox::CorrectToPreviousValue 0 恢复成上一值(默认)
QAbstractSpinBox::CorrectToNearestValue 1 取一个最近值.
————————————————————————————————————————————————————————————

QSpinBox 

与上述抽象类相对,多出了以下外观属性:

Properties

displayIntegerBase比较特殊,用于改变基本显示字符。它默认值为10,即我们常用的数字0-9,这时,值变化和我们常用的数字无差别。如果设置这个值成13,则进入旋转的基本字符除0-9外,增加了a,b,c,共13个,这样,值的变化为:0,1,2,3,4,5,6,7,8,9,1a,1b,1c,10,11……19,2a,2b,2c,20,21………

少于10时,如设置成3时,就成:0,1,2,10,11,12……

公有函数如下:

[cpp]  view plain  copy
  1. QSpinBox(QWidget * parent = 0)  
  2. ~QSpinBox()  
  3.   
  4. void    setMaximum(int max)//设置最大值  
  5. void    setMinimum(int min)  
  6. void    setPrefix(const QString & prefix)//加前辍,如让它显示 “值 10 元”,值即是前辍,元是后辍  
  7. void    setSuffix(const QString & suffix)//加后辍  
  8. void    setRange(int minimum, int maximum)//设置范围  
  9. void    setSingleStep(int val)//设步长,每点一次按钮改变的值(在原基础上加上或减去该值)  
  10. void    setDisplayIntegerBase(int base)  
  11.   
  12.   
  13. int maximum() const  
  14. int minimum() const  
  15. QString prefix() const  
  16. int singleStep() const  
  17. QString suffix() const  
  18. int value() const  
  19. QString cleanText() const  
  20. int displayIntegerBase() const  

示例代码如下:

[cpp]  view plain  copy
  1. ui->spinBox->setRange(10,30);  
  2.     ui->spinBox->setSingleStep(5);  
  3.     ui->spinBox->setPrefix("值");  
  4.     ui->spinBox->setSuffix("元");  
  5.     qDebug()<<"value()返回值:"<<ui->spinBox->value();  
  6.     qDebug()<<"cleanText()返回值:"<<ui->spinBox->cleanText();  

输出:

value()返回值: 10

cleanText()返回值: "10" 

返回值的类型不同

Public Slots

void setValue(int val)

Signals

void valueChanged(int i)
void valueChanged(const QString & text)
上述两信号的不同在于前一个参数单单返回值,而后一个包括前后辍。

————————————————————————————————————————————————————————————

QDoubleSpinBox

其属性如下:

Properties

decimals意思为小数(位数),用于设置精度级别,默认两位小数。

公有函数如下:

[cpp]  view plain  copy
  1. Public Functions  
  2. QDoubleSpinBox(QWidget * parent = 0)  
  3. ~QDoubleSpinBox()  
  4. QString cleanText() const  
  5. int decimals() const  
  6. double  maximum() const  
  7. double  minimum() const  
  8. QString prefix() const  
  9. void    setDecimals(int prec)  
  10. void    setMaximum(double max)  
  11. void    setMinimum(double min)  
  12. void    setPrefix(const QString & prefix)  
  13. void    setRange(double minimum, double maximum)  
  14. void    setSingleStep(double val)  
  15. void    setSuffix(const QString & suffix)  
  16. double  singleStep() const  
  17. QString suffix() const  
  18. virtual QString textFromValue(double value) const  
  19. double  value() const  
  20. virtual double  valueFromText(const QString & text) const  

Public Slots

void setValue(double val)

Signals

void valueChanged(double d)
void valueChanged(const QString & text)
都是说过的,只列出来好了。
————————————————————————————————————————————————————————————

QDateTimeEdit

它的文本框默认分为六个部分(sections),“2000/1/1 0:00:00”,即“年/月/日  时:分:秒”六部分。

各部分枚举值

enum QDateTimeEdit::Section
flags QDateTimeEdit::Sections

Constant Value
QDateTimeEdit::NoSection 0x0000
QDateTimeEdit::AmPmSection上午Am或下午Pm 0x0001
QDateTimeEdit::MSecSection毫秒 0x0002
QDateTimeEdit::SecondSection 0x0004
QDateTimeEdit::MinuteSection 0x0008
QDateTimeEdit::HourSection 0x0010
QDateTimeEdit::DaySection 0x0100
QDateTimeEdit::MonthSection 0x0200
QDateTimeEdit::YearSection 0x0400

属性如下:


[cpp]  view plain  copy
  1. Public Functions  
  2.   
  3. QDateTimeEdit(QWidget * parent = 0)  
  4. QDateTimeEdit(const QDateTime & datetime, QWidget * parent = 0)  
  5. QDateTimeEdit(const QDate & date, QWidget * parent = 0)  
  6. QDateTimeEdit(const QTime & time, QWidget * parent = 0)  
  7. ~QDateTimeEdit()  
  8.   
  9. void    setCalendarPopup(bool enable)//设置一个下拉列表式的日历选择小部件,如下图1  
  10. void    setCalendarWidget(QCalendarWidget * calendarWidget)//可用这个加入一个自定义的日历  
  11. void    setCurrentSection(Section section)//将光标转移到某一部分,用以改变该值  
  12. void    setCurrentSectionIndex(int index)//与上述功能相同,通过索引时,第一部分索引值为0  
  13. void    setDateRange(const QDate & min, const QDate & max)//设置日期范围  
  14. void    setTimeRange(const QTime & min, const QTime & max)//设置时间范围  
  15. void    setDateTimeRange(const QDateTime & min, const QDateTime & max)//同时设置以上两种  
  16. void    setMaximumDate(const QDate & max)//设置最大日期,设置范围了,就不需要了  
  17. void    setMaximumDateTime(const QDateTime & dt)  
  18. void    setMaximumTime(const QTime & max)  
  19. void    setMinimumDate(const QDate & min)  
  20. void    setMinimumDateTime(const QDateTime & dt)  
  21. void    setMinimumTime(const QTime & min)  
  22. void    setDisplayFormat(const QString & format)//设置显示格式,见下方说明3  
  23. void    setSelectedSection(Section section)  
  24. void    setTimeSpec(Qt::TimeSpec spec)  
  25. void    clearMaximumDate()//清除……  
  26. void    clearMaximumDateTime()  
  27. void    clearMaximumTime()  
  28. void    clearMinimumDate()  
  29. void    clearMinimumDateTime()  
  30. void    clearMinimumTime()  
  31.   
  32. bool    calendarPopup() const  
  33. QCalendarWidget *   calendarWidget() const  
  34. Section currentSection() const  
  35. int currentSectionIndex() const  
  36. QDate   date() const  
  37. QTime   time() const  
  38. QDateTime   dateTime() const  
  39. QString displayFormat() const  
  40. QDate   maximumDate() const  
  41. QDateTime   maximumDateTime() const  
  42. QTime   maximumTime() const  
  43. QDate   minimumDate() const  
  44. QDateTime   minimumDateTime() const  
  45. QTime   minimumTime() const  
  46. Sections    displayedSections() const  
  47. Section sectionAt(int index) const  
  48. int sectionCount() const  
  49. QString sectionText(Section section) const  
  50. Qt::TimeSpec    timeSpec() const  


1,setCalendarPopup(true);效果,右方箭头也变成下拉列表框(默认是没有弹出来的……)



2,enum Qt::TimeSpec

Constant Value Description
Qt::LocalTime 0 Locale dependent time (Timezones and Daylight Savings Time).
Qt::UTC 1 协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。
Qt::OffsetFromUTC 2 An offset in seconds from Coordinated Universal Time.
Qt::TimeZone 3 A named time zone using a specific set of Daylight Savings rules.
3,displayFormat 控件文本框内日期时间的显示格式,例如默认的格式可以这样描述 "yyyy/MM/dd hh:mm:ss",从而显示为上图中的那样,用一些特殊的字符代表日期时间的各部分,具体见 点击打开链接

槽与信号比较简单,以为只列出:

Public Slots

void setDate(const QDate & date)
void setDateTime(const QDateTime & dateTime)
void setTime(const QTime & time)

Signals

void dateChanged(const QDate & date)
void dateTimeChanged(const QDateTime & datetime)
void timeChanged(const QTime & time)

———————————————————————————————————————————————————————————

QDateEdit与QTimeEdit

都继承自QDateTimeEdit

查看它们的函数

QDateEdit:

Public Functions

  QDateEdit(QWidget * parent = 0)
  QDateEdit(const QDate & date, QWidget * parent = 0)
  ~QDateEdit()


QTimeEdit:

Public Functions

  QTimeEdit(QWidget * parent = 0)
  QTimeEdit(const QTime & time, QWidget * parent = 0)
  ~QTimeEdit()

除上面的构造函数外,就没有其它函数了,继承除外。


这样,QDateEdit与QTimeEdit可认为QDateTimeEdit通过setDisplayFormat(const QString & format)函数设置格式后产生的便捷部件。

事实上,QDateEdit与QTimeEdit也可以能过继承来的setDisplayFormat()函数设置成QDateTimeEdit的样子。

似乎这两个有点多余

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要创建一个QTableView控件,用于显示时间策略表格。然后,你需要创建一个QStandardItemModel模型,用于存储数据,并将其设置为tableView的模型。 接下来,你需要创建一个自定义委托类,用于自定义单元格的显示和编辑。在自定义委托类中,你需要重写createEditor()函数和setEditorData()函数,用于创建自定义的编辑器和设置编辑器的数据。还需要重写setModelData()函数和updateEditorGeometry()函数,用于保存编辑器的数据和更新编辑器的位置和大小。 在创建自定义委托类后,你需要将其与tableView关联。你可以通过调用tableView的setItemDelegate()函数来设置委托类。在设置委托类时,你需要指定每个单元格的委托类,这可以通过调用setItemDelegateForRow()和setItemDelegateForColumn()函数来实现。 最后,你需要在QStandardItemModel模型中添加数据,并通过tableView显示出来。你可以通过调用QStandardItemModel的setItem()函数和setData()函数来添加数据,并在tableView中显示出来。 下面是一个简单的时间策略表格的示例代码: ``` #include <QApplication> #include <QTableView> #include <QStandardItemModel> #include <QSpinBox> #include <QDateTimeEdit> #include <QHBoxLayout> #include <QStyledItemDelegate> class TimeDelegate : public QStyledItemDelegate { public: QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override { if (index.column() == 1) { QSpinBox* spinBox = new QSpinBox(parent); spinBox->setMinimum(0); spinBox->setMaximum(23); return spinBox; } else if (index.column() == 2) { QDateTimeEdit* dateTimeEdit = new QDateTimeEdit(parent); dateTimeEdit->setDisplayFormat("hh:mm"); dateTimeEdit->setDateTime(QDateTime::currentDateTime()); return dateTimeEdit; } else { return QStyledItemDelegate::createEditor(parent, option, index); } } void setEditorData(QWidget* editor, const QModelIndex& index) const override { if (index.column() == 1) { int value = index.model()->data(index, Qt::EditRole).toInt(); QSpinBox* spinBox = static_cast<QSpinBox*>(editor); spinBox->setValue(value); } else if (index.column() == 2) { QDateTime value = index.model()->data(index, Qt::EditRole).toDateTime(); QDateTimeEdit* dateTimeEdit = static_cast<QDateTimeEdit*>(editor); dateTimeEdit->setDateTime(value); } else { QStyledItemDelegate::setEditorData(editor, index); } } void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override { if (index.column() == 1) { QSpinBox* spinBox = static_cast<QSpinBox*>(editor); int value = spinBox->value(); model->setData(index, value, Qt::EditRole); } else if (index.column() == 2) { QDateTimeEdit* dateTimeEdit = static_cast<QDateTimeEdit*>(editor); QDateTime value = dateTimeEdit->dateTime(); model->setData(index, value, Qt::EditRole); } else { QStyledItemDelegate::setModelData(editor, model, index); } } void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override { editor->setGeometry(option.rect); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); QTableView tableView; QStandardItemModel model; TimeDelegate delegate; model.setColumnCount(3); model.setHeaderData(0, Qt::Horizontal, "日期"); model.setHeaderData(1, Qt::Horizontal, "时间"); model.setHeaderData(2, Qt::Horizontal, "备注"); for (int row = 0; row < 5; ++row) { model.setItem(row, 0, new QStandardItem(QDate::currentDate().toString("yyyy-MM-dd"))); model.setItem(row, 1, new QStandardItem(QString::number(QTime::currentTime().hour()))); model.setItem(row, 2, new QStandardItem("")); } tableView.setModel(&model); tableView.setItemDelegateForRow(0, &delegate); tableView.setItemDelegateForRow(1, &delegate); tableView.setItemDelegateForRow(2, &delegate); tableView.setItemDelegateForRow(3, &delegate); tableView.setItemDelegateForRow(4, &delegate); tableView.show(); return a.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值