一般属性在类的接口中有读取函数和设置函数,对于设置属性函数就是属性名前加set
如QSpinBox类中有属性value用来显示组件当前值,可以使用setValue()方法来设置该组件的值.
1.输入组件和显示组件
1.1数值输入显示组件SpinBox
1)QSpinbox与QDoubleSpinBox
//Public Slots
void setValue(int val);
//Signals
void valueChanged(int i);
void valueChanged(const QString &text);
QSpinBox用于整数的显示和输入
QDougbleSpinBox用于浮点数的显示和输入
读取数值类型和设置数据类型不同时,无需转换,Qt会自动转换.
常用属性
cleanText : const QString //清理文本
displayIntegerBase : int //显示整数使用的进制
maximum : int //最大值
minimum : int //最小值
prefix : QString //前缀
singleStep : int //单步值
suffix : QString //后缀
value : int //具体值,显示值
接口
//Public Functions
QString cleanText() const;
QString prefix()const;
int maximum()const;
int minimum()const;
int singleStep()const;
int value()const;
void setMaximum(int max);
void setMinimum(int min);
void setPrefix(const QString &prefix);
void setRange(int minimum, int maximum);
void setSingleStep(int val);
2)QSlider
QSlider是滑动条,父类是QAbstractSlider

常用接口
QAbstractSlider(QWidget *parent = nullptr);
virtual ~QAbstractSlider();
bool hasTracking() const;
bool invertedAppearance() const;
bool invertedControls() const;
bool isSliderDown() const;
int maximum() const;
int minimum() const;
Qt::Orientation orientation() const;
int pageStep() const;
void setInvertedAppearance(bool);
void setInvertedControls(bool);
void setMaximum(int);
void setMinimum(int);
void setPageStep(int);
void setSingleStep(int);
void setSliderDown(bool);
void setSliderPosition(int);
void setTracking(bool enable);
int singleStep() const; //单步值
int sliderPosition() const; //滑块位置
void triggerAction(QAbstractSlider::SliderAction action);
int value() const;
singleStep:单步值 pageStep:在Slider上输入焦点,按PgUp和PgDn键改变的值 sliderPosition滑块位置 tracking:value和sliderPosition是否对应,该值为BOOL变量 orientation:Slider的方向,取值为Qt::Horizontal和Qt::Vertical invertedAppearance:显示方式是否相反,false时自左向右增大 invertedControls:PgUp和PgDn键是否对调 |
3)QScrollBar
滚动条(卷轴),和QSlider的一样,继承了QAbstrackSlider的接口等

4)QDial
拨号盘,和QSilder无二致,只需要注意两个附加属性
notchesVisible:小刻度是否可见
notchTarget:表盘刻度间的间隔像素值
int notchSize() const
qreal notchTarget() const
bool notchesVisible() const
void setNotchTarget(double target)
5)QProgressBar
QString format() const;
bool invertedAppearance() const;
bool isTextVisible() const;
int maximum() const;
int minimum() const;
Qt::Orientation orientation() const;
void resetFormat();
void setAlignment(Qt::Alignment alignment);
void setFormat(const QString &format);
void setInvertedAppearance(bool invert);
void setTextDirection(QProgressBar::Direction textDirection);
void setTextVisible(bool visible);
virtual QString text() const;
QProgressBar::Direction textDirection() const;
int value() const;
format显示文字的格式,%p%显示百分比,%v显示当前值,%m显示当前值 |
6)QLCDNumber
数字时钟,
bool checkOverflow(double num) const;
bool checkOverflow(int num) const;
int digitCount() const;
int intValue() const;
QLCDNumber::Mode mode() const;
QLCDNumber::SegmentStyle segmentStyle() const;
void setDigitCount(int numDigits);
void setMode(QLCDNumber::Mode);
void setSegmentStyle(QLCDNumber::SegmentStyle);
bool smallDecimalPoint() const;
double value() const;
digitCount显示数的位数,小数点也算一位
smallDecimallPoint是否有小数点
mode数的显示进制,setDecMode()设置成十进制,setBinMode()二进制setOctMode()八进制,setHexMode()十六进制
intValue返回显示的整数值
value返回当前值
2.下拉列表和文本编辑组件
2.1 QComboBox
下拉列表组件,
列表每个内容称为item, 且每个item可以关联一个QVariant类型的变量,存储不可见的用户数据;
双击ui界面组件,可以直接添加需要的item
不可访问整个列表,可索引item
默认显示的第一个item的名称
void addItem(const QString&, const QVariant& userData = QVariant());
//addItem()可以给项关联自定义数据
int currentIndex();
//currentIndex()返回当前项的序号,0开始
int count();
//count()返回项总数
QString currentText();
//currentText()当前项的文字
QString itemText(int index);
//itemText()指定索引号项的文字
QVariant currentData(int role = Qt::UserRole);
//currentData()返回当前项关联的自定义数据
QVariant itemData(int index , int role = Qt::UserRole);
void currentIndexChanged(int index);
void currentIndexChanged(const QString& text);
//currentIndexChanged()是信号,其中index是索引号,text是当前项的文字内容
ui->comboBox->clear();
ui->comboBox->setEditable(checked);
ui->comboBox->addItem(QString); //列表末尾追加一个字符串
ui->comboBox->addItems(QStringList); //列表末尾追加一个列表字符串
2.2QLineEdit
单行文本编辑器
QString text() const;
void setEchoMode(EchoMode);
EchoMode是枚举类型,标记了该编辑器如何显示已输入的文本
setEchoMode()设置编辑器显示方式,其中EchoMode主要包含了如下成员:
- QLineEdit::Normal
- QLineEdit::NoEcho (不显示任何)
- QLineEdit::Password (显示*)
- QLineEdit::PasswordEchoOnEdit (输入时显示,否则显示*)
2.3QPlainTextEdit
QPlainTextEdit是多行文本编辑组件,提供右键快捷菜单,文字内容是以QTextDocument类型的文本对象 存储的,即以文本块的形式存储的,一个文本块就是一个段落,一个段落以回车符作为结束符
QDocument,一个文档document,包含了多个文本块,从document中提取文本块则是QTextBlock类型存储的
1)QTextBlock
文本块,是QTextDocument的基本构成
text()提取纯文本信息
2)QTextDocument
是QPlainTextEdit的基本构成
int blockCount();
//获取文本块概述
QTextBlock findBlockByNumber(int blockNumber);
//从0个文本块开始读取,至blockNumber个
3)QPlainTextEdit
appendPlainText(const QString &text);
//末尾添加一行字符串
QString toPlainText() const;
//提取全部字符输出成一条字符串
QTextDocument* document();
//返回文本指针
customContextMenuRequested();
//信号,右键菜单启动信号
createStandardContextMenu();
//创建标准菜单
3.基于item的组件
用于项处理的组件,有两类一个类是Item View,另一类是Item Widget,后者最常用
在ui界面中:
- ItemView是基于Model/View结构存储数据
- ItemWidget是基于直接把数据存储到每一个项中
3.1QListWidget
列表组件存储,区分QComboBox是下拉列表,区分与QPlainTextEdit是多行文本编辑器
QListWidget,一行一项,存储多个项的列表组件,每个项是一个QListWidgetItem类对象,ui界面双击可编辑
QListWidgetItem
setFlags()设置该item的属性
QListWidgetItem::flags;
setFlags();
/*
setFlags()时,选择参数:
Qt::ItemIsSelectable
Qt::ItemIsEditable 该项是否可编辑
Qt::ItemIsDragEnabled 该项是否可拖动
Qt::ItemisDropEnabled 该项是否可以接收拖放的项
Qt::ItemIsUserCheckable 是否可以选中
*/
item的移除,复选,创建,显示文本
其中添加自然是针对QListWidget而不是QListWidgetItem
QListWidgetItem::takeItem(int row);
//takeItem() 移除第row行的Item,但需要手动用delete 删除项
QListWidgetItem::setCheckState(Qt::CheckState);
//setCheckState()设置项的复选状态
QListWidgetItem(const QString &text, QListWidget *parent = nullptr, int type = Type);
//创建一个list项
QString text() const;
//返回该list项的text文本
item的添加,插入,list列表的清理
QListWidget::clear();
QListWidget::addItem();
//addItem() 每个项都是一个QListWidgetItem类对象,
//先创建该类对象,然后用addItem()方法把该项添加到列表中,追加
QListWidget::insertItem(int row, QListWidgetItem * )
//insertItem()在第row行前插入一个Item
item的索引
QListWidgetItem *currentItem() const;
//返回当前list的item
//信号:
currentRowChanged(int row);
//信号发射且传递当前项行号
currentItemChanged(QListWidgetItem*current,QListWidgetItem* pre);
//信号发射,传递当前项和前一项
curentItemChanged(const QString&);
//当前项内容发生变化
3.2QTreeWidget
一节点一项,每个节点都是一个QTreeWidgetItem类对象,添加节点必然先定义该类对象
创建节点的类型往往是枚举量,且值大于1000
树包括了顶层节点和分组节点,其中分组节点级数无限制
添加节点时,最好确保父子节点设定的类型相同.
树和列
把树和列分开看, 列的存在是对树的一个信息展示增强, 每一列表示了节点的归属信息,每一个子节点可以根据列的个数(暂为m列), 来设置子节点所包含的QString对象个数n,一般是n小于等于m
QTreeWidgetItem接口
创建Item
学习如下这种创建技巧, 这里每个子节点name都是根据列个数而添加了3个QString对象
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTreeWidgetItem* item1 = new QTreeWidgetItem(QStringList()<<"class1");
ui->treeWidget->addTopLevelItem(item1);
QTreeWidgetItem* name1 = new QTreeWidgetItem(QStringList()<<"alex"<<"aleb"<<"alesk");
QTreeWidgetItem* name2 = new QTreeWidgetItem(QStringList()<<"alexx"<<"aleb"<<"alesk");
QTreeWidgetItem* name3 = new QTreeWidgetItem(QStringList()<<"alexxx"<<"aleb"<<"alesk");
item1->addChildren(QList<QTreeWidgetItem*>()<<name1<<name2<<name3);
QTreeWidgetItem* item2 = new QTreeWidgetItem(QStringList()<<"class2");
ui->treeWidget->addTopLevelItem(item2);
}
//QTreeWidgetItem
void addChild(QTreeWidgetItem *child);
void addChildren(const QList<QTreeWidgetItem *> &children);
QTreeWidgetItem *takeChild(int index);
QList<QTreeWidgetItem *> takeChildren();
void removeChild(QTreeWidgetItem *child);
//增加和删除节点
QTreeWidgetItem *child(int index) const;
//索引节点
int childCount() const;
//节点总数
int indexOfChild(QTreeWidgetItem *child) const;
//孩子节点总数
void insertChild(int index, QTreeWidgetItem *child);
//插入节点
void insertChildren(int index, const QList<QTreeWidgetItem *> &children);
void setText(int column, const QString &text);
//设置某列的文字
QString text(int column) const;
//返回某列的文字
bool QTreeWidgetItem::isSelected() const;
//信号,当节点被选择时发射
QTreeWidget接口
ui->treeFiles->clear();//清除目录树所有节点
//QTreeWidget
void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item);
//添加顶层节点
void QTreeWidget::addTopLevelItems(const QList<QTreeWidgetItem *> &items);
//添加多个顶层节点
int currentColumn() const;
//返回当前列
QTreeWidgetItem *currentItem() const;
//返回当前节点
QTreeWidgetItem *takeTopLevelItem(int index);
//从树中删除顶层节点,不删除节点对象
int columnCount() const;
//返回树的列数
int topLevelItemCount() const;
//返回树顶点总数
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
//信号,树改变时发射
3.3 QTableWidget
一单元格一项,Table即桌子,表,表格的意思
QTableWidget是表格组件类,表格第一行为行表头,第一列是列表头,表头不可编辑,
每个单元格是一个QTableWIdgetItem对象,且可存储一个QVariant变量
每次向表格添加单元格内容时,需要先创建QTableWidgetItem类对象
一般创建表格,先定列数,然后增加行数
在ui界面中,可以编辑行列表头和内容,但是在程序中自动添加和修改时,仍需要借助接口实现.
1) QTableWidgetItem
QTableWidgetItem(const QTableWidgetItem &other);
QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
QTableWidgetItem(const QString &text, int type = Type);
int column() const;
//返回表格的column总数
int row() const;
//返回单元格的rows总数
QString text() const;
//返回单元格的内容
QFont font() const;
//返回单元格的字体
bool isSelected() const;
//如果item被选中,返回true
void setBackground(const QBrush &brush);
//设置单元格北京
void setFont(const QFont &font);
void setIcon(const QIcon &icon);
void setSelected(bool select);
void setText(const QString &text);
//设置单元格内容
void setTextAlignment(int alignment);
//设置单元格对齐方式
int textAlignment() const;
//返回单元格对齐方式
2) QTableWidget
QTableWidget(int rows, int columns, QWidget *parent = nullptr);
int column(const QTableWidgetItem *item) const;
//返回item所在的列
int row(const QTableWidgetItem *item) const;
//返回item所在的行
int columnCount() const;
//返回列的总个数
int currentColumn() const;
//返回当前item所在列
QTableWidgetItem *currentItem() const;
//返回当前的item
int currentRow() const;
//返回当前item所在行
void editItem(QTableWidgetItem *item);
//如果可编辑则对该item进入编辑状态
QTableWidgetItem *horizontalHeaderItem(int column) const;
//返回行表头
QTableWidgetItem *item(int row, int column) const;
//返回指定行列的item
void removeCellWidget(int row, int column);
//删除指定行列的单元格
int rowCount() const;
//返回总行数
void setColumnCount(int columns)
void setCurrentCell(int row, int column);
//设置当前单元格的位置
void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command)
void setCurrentItem(QTableWidgetItem *item);
//覆盖当前item
void setHorizontalHeaderItem(int column, QTableWidgetItem *item);
//设置行表头
void setHorizontalHeaderLabels(const QStringList &labels);
//设置多个行表头
void setItem(int row, int column, QTableWidgetItem *item);
//设置指定行列的item
void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
//设置选择范围
void setRowCount(int rows);
//设置总行数
void setVerticalHeaderItem(int row, QTableWidgetItem *item);
//设置列表头
void setVerticalHeaderLabels(const QStringList &labels);
//设置多个列表头
QTableWidgetItem *takeHorizontalHeaderItem(int column);
//移除行表头
QTableWidgetItem *takeItem(int row, int column);
//移除指定行列item
QTableWidgetItem *takeVerticalHeaderItem(int row);
//移除列表头
QTableWidgetItem *verticalHeaderItem(int row) const;
//返回指定行的列表头
void clear();
//清空表格
void insertColumn(int column);
//在第column列插入一列
void insertRow(int row);
//在第row行插入行
void removeColumn(int column);
//移除该列
void removeRow(int row);
//移除该行
currentCellChanged(int cRow,int cCol,int preRow,int preCol);
currentCellChanged(QTableWidgetItem*, QTableWidgetItem*);
//currentCellChanged():QTableWidget有信号:当单元格发生切换时,发射
4.日期,时间
4.1 相关的存储类
QTime
时间数据类型
QDate
日期数据类型
QDataTIme
时间日期数据类型
currentDateTime();
time();
date();
4.2相关的界面组件类

QTimeEdit
编辑时间的组件
QDateEdit
编辑日期的组件
QDateTimeEdit
datetime
date
time
maximumDateTime
minimumDateTime
maximumTime
minimumTime
currentSection
currentSectionIndex
calendarPopup
displayFormat
currentSection:返回当前光标所在的时间日期数据段 currentSectionINdex:用序号表示光标所在数据段 calendarPopup:允许弹出一个日历选择框 displayFormat:显示格式,如"yyyy-MM-dd HH:mm:ss" |
QCalendarWidget
信号selectionChanged(),日历选择时发射此信号,返回的是QDate类
5. Containers容器类组件
ui编辑器中的containers主要有如下几种
5.1 QToolBox
Box即盒子,箱子的意思
QToolBox类,工具箱类,在QToolBox按照"组" 为单位, 但实际上该"组"表示的是"项", 下图中就有3组(项)工具;
同样的QToolBox可以在ui中直接进行编辑,也可以通过接口实现
常用接口
5.2QTabWidget
QTabWidget并不是一个 ItemWidget,是一个container,可以包含ItemWidget组件

Tab即标签的意思,也叫多页(标签)容器类组件
int addTab(QWidget *page, const QString &label);
int addTab(QWidget *page, const QIcon &icon, const QString &label);
void clear();
int count() const;
//页数总数
int currentIndex() const;
//当前所在页index
QWidget *currentWidget() const;
//当前所在页
int indexOf(QWidget *w) const;
//指定页的页数
int insertTab(int index, QWidget *page, const QString &label);
//在index处插入新页
bool isMovable() const;
//页是否可以移动
bool isTabEnabled(int index) const;
void removeTab(int index);
//移除指定页
void setMovable(bool movable);
//设置是否可以移动
void setTabText(int index, const QString &label);
//设置页的文字
QString tabText = ui->tabWidget->tabText(1);
//获取指定页文字
6. Button 按钮/Menu菜单
6.1QToolButton
带menu的工具按钮,具有下拉菜单
QToolButton(QWidget *parent = nullptr);
QAction *defaultAction() const;
//返回默认的QAction
void setDefaultAction(QAction *action);
//用于给按钮添加Action,每次单击菜单中的action都会出发action槽函数
QMenu *menu() const;
//返回已有的菜单
void showMenu();
//显示菜单
void setMenu(QMenu *menu);
//设置菜单
QToolButton::ToolButtonPopupMode popupMode() const;
//返回按钮按下的弹出菜单模式
void setPopupMode(QToolButton::ToolButtonPopupMode mode);
//设置按钮样式
Qt::ToolButtonStyle toolButtonStyle() const;
//返回按钮样式
void setToolButtonStyle(Qt::ToolButtonStyle style);
//设置按钮样式
setPopupMode() 设置弹出菜单模式,
QToolButton::MenuButtonPopup枚举量,菜单是小箭头,按箭头弹出菜单,直接单击按钮只会启动该按QAction
QToolButton::InstantPopup同理,但单击按钮不会启动相关QAction
7. 菜单
在QWidget类中,都会有信号customContextMenuRequested(),右键时自动发射该信号,只要给该信号编写槽函数,然后关联即可.
每个菜单选项关联一个QAction这样可以避免菜单里的功能和菜单类对象关联,也就是一个菜单里包含了多个QAction;
每个QAction的槽函数负责每个菜单选项的功能实现;
必须要在显示后删除菜单类对象.
QMenu::exec();
QMenu::addAction();
QMenu* menuList=new QMenu(this); //创建菜单
//菜单添加QAction选项
menuList->addAction(ui->actListIni);
menuList->addAction(ui->actListClear);
menuList->addAction(ui->actListInsert);
menuList->addAction(ui->actListAppend);
menuList->addSeparator();
//菜单内添加分割线
menuList->exec(QCursor::pos()); //在鼠标光标位置显示右键快捷菜单
delete menuList; //手工创建的指针必须手工删除
8. 图标
QIcon
QIcon aIcon;
aIcon.addFile(":/images/icons/check2.ico"); //设置ICON的图标
9.标签,图片
9.1 QLabel
显示组件,可以显示图片、视频和文字,功能强大;
可以通过QLabel来设置一个QPixmap类对象,通过QPixMap类对象设置图片参数;
QLabel可以在ui界面中直接拖拽、修改.
9.2 QPixmap
10. 字体
QFont
QFont font;
font.setBold(true);
font.setPointSize(12);//字体大小
//与QStandardItemModel结合起来看
void MainWindow::on_actFontBold_triggered(bool checked)
{//设置字体粗体
if (!theSelection->hasSelection())
return;
//获取选择单元格的模型索引列表
QModelIndexList selectedIndex=theSelection->selectedIndexes();
for (int i=0;i<selectedIndex.count();i++)
{
QModelIndex aIndex=selectedIndex.at(i); //获取一个模型索引
QStandardItem* aItem=theModel->itemFromIndex(aIndex);//获取项数据
QFont font=aItem->font(); //获取字体
font.setBold(checked); //设置字体是否粗体
aItem->setFont(font); //重新设置字体
}
}