QToolBox
QToolBox
QToolBox是工具箱组件类,是一种垂直页的多页容器组件。
在UI可视化设计时,在工具箱组件上点击鼠标右键调出快捷菜单,分别可以使用Insert Page和Delete Page菜单项添加页和删除页。
UI可视化设计的效果图:
工具箱的每个页面都是一个QWidget的组件,在页面的工作区可以放置任何其他界面组件
QToolBox有一个信号currentChanged(),在切换页面时组件发射此信号,其函数原型定义如下:
参数index表示当前页面序号
void QToolBox::currentChanged(int index);
QToolBox类提供了用于页面控制、属性控制的各类接口,如图,详细查阅QT官方文档
QToolButton
QToolButton
QToolButton是工具按钮
QToolButton有几个新定义的属性:
1)popupMode属性:当按钮有下拉菜单时,此属性决定了下拉菜单的模式
- QToolButton::DelayedPopup:如果按钮有下拉菜单,按下按钮并延时一会后,才显示下拉菜单
- QToolButton::MenuButtonPopup:会在按钮右侧显示一个带箭头图标的下拉按钮,点击下拉按钮才显示下拉菜单。
- QToolButton::InstantPopup:会在按钮的右下角显示一个很小的下拉箭头图标,点击下拉按钮才显示下拉菜单。
2)toolButtonStyle属性:表示工具按钮上文字与图标的显示方式
- QToolButton::ToolButtonIconOnly:仅显示图标
- QToolButton::ToolButtonTextOnly:仅显示文字
- QToolButton::ToolButtonTextBesideIcon:文字在图标旁边
- QToolButton::ToolButtonUnderTextIcon:文字在图标下面
- QToolButton::ToolButtonFollowStyle:根据QStyle::StyleHint格式显示
3)autoRaise属性:如果设置为true,按钮就没有边框,鼠标移动到按钮上才显示按钮边框
4)arrowType属性:表示按钮上箭头的方向
- QToolButton::NoArrow:没有图标
- 其他四个枚举类型表示四个方向的图标
QToolButton的其他接口函数:
void QToolButton::setDefaultction(QAction *action);
这个函数用于为工具按钮设置关联的Action。
设置关联的Action后,工具按钮的文字、图标、提示
等属性和关联的Action一样,
工具案件的triggered()信号自动关联Action的triggered()信号。
void QToolButton::setMenu(QMenu *menu);
设置工具按钮的下拉菜单
其他公共接口函数:
QListWidget
QListWidget
QListWidget的每一个节点是一个项,一个项存储了文字、文字的格式定义、图标、用户数据等内容。
QListWidget的列表项是QListWidgetItem对象。在UI可视化设计时,编译器可以对没一个项进行设置。QListWidgetItem没有父类,所以没有属性,但它有一些读取函数、设置函数。
QListWidgetItem用表格展示:
读取函数 | 设置函数 | 数据类型 | 设置函数的功能 |
---|---|---|---|
text() | setText() | QString | 设置项的文字 |
icon() | setIcon() | QIcon | 设置项的图标 |
data() | setData() | QVariant | 为项的不同角色设置数据,可设置用户数据 |
flags() | setFlags() | Qt::ItemFlags | 设置项的特性,是枚举类型 |
checkState() | setCheckState() | Qt::CheckState | 设置项的复选状态 |
isSelected() | setSelected() | bool | 设置为当前项,相当于点击了这个项 |
QListWidgetItem还有一个标志变量flags,用来设置列表项的特性,flags是枚举类型Qt::ItemFlag的枚举类型的组合
- Selectable:列表可以被选择,对应枚举类型Qt::ItemIsSelectable
- Editable:列表可以被编辑,对应枚举类型Qt::ItemIsEnabled
- DragEnabled:列表项可以被拖动,对应枚举类型Qt::ItemIsDragEnabled
- DropEnabled:列表项可以接收拖动的项,对应枚举类型Qt::ItemIsDropEnabled
- UserCheckable:列表项可以被复选,对应枚举类型Qt::ItemIsUserCheckable
- Enabled:列表项可用,对应枚举类型Qt::ItemIsEnabled
- Tristate:自动改变列表的复选状态,对应枚举类型Qt::ItemIsAutoTristate。该特性对QTreeWidget的节点有效,对QListWidget的列表项无效
源码:
enum ItemFlag {
NoItemFlags = 0,
ItemIsSelectable = 1,
ItemIsEditable = 2,
ItemIsDragEnabled = 4,
ItemIsDropEnabled = 8,
ItemIsUserCheckable = 16,
ItemIsEnabled = 32,
ItemIsAutoTristate = 64,
#if QT_DEPRECATED_SINCE(5, 6)
ItemIsTristate = ItemIsAutoTristate,
#endif
ItemNeverHasChildren = 128,
ItemIsUserTristate = 256
};
设置拖动时,还需要设置
ui->listWidget->setDragDropMode(QAbstractItemView::InternalMove);
QListWidget类主要接口:
添加或删除项
函数名 | 功能 |
---|---|
void addItem() | 添加项 |
void insertItem() | 插入项 |
函数名 | 功能 |
---|---|
QListWidgetItem *takeItem() | 从列表组件中移除一个项,并返回这个项的对象指针,但是并不会在内存中删除这个项,需要delete 返回的指针 |
void clear() | 移除列表中的所有的项,并且从内存中删除对象 |
项的访问
函数名 | 功能 |
---|---|
QListWidgetItem *currentItem() | 返回当前项的指针,没有则返回nullptr |
void setCurrentItem() | 设置当前项 |
QListWidgetItem *item() | 根据行号返回一个项 |
QListWidgetItem *itemAt() | 根据屏幕坐标返回项,例如鼠标在列表组件上移动时,可以用这个函数返回光标所在项 |
int currentRow() | 返回当前项的行号,没有则返回-1 |
void setCurrentRow() | 设置当前行 |
int row() | 返回一个项的所在行的行号 |
int count() | 返回列表组件中项的个数 |
排序
函数名 | 功能 |
---|---|
void setSortingEnabled() | 设置列表是否可有排序 |
bool isSortingEnabled() | 列表是否可排序 |
void sortItem() | 对列表进行排序,可指定排序方式为升序或降序;Qt::AscendingOrder(升序);Qt::DescendingOrder(降序) |
信号
创建右键快捷菜单
每一个继承Widget的类都有customContextMenuRequested()
信号,在一个组件上点击鼠标右键时,组件发射这个信号,用于请求创建快捷菜单。如果为此信号编写槽函数,就可以创建和运行快捷次菜单。
在使用之前,还需要设置其contextMenuPolicy属性,设置该属性的函数原型如下:
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
- Qt::NoContextMenu:组件没有快捷菜单,由其父类处理快捷菜单
- Qt::PreventContextMenu:阻止快捷菜单,并且点击鼠标右键事件也不会交给父类容器组件处理
- Qt::DefaultContextMenu:默认快捷菜单,组件QWidget::contextMenuEvent()事件被自动处理。有些组件有自己的默认快捷菜单。在无须任何编程的情况下,运行时点击鼠标右键就会出现一个标准的编辑操作快捷菜单
- Qt::ActionsContextMenu:自动根据QWidget::actions()返回的Action列表创建并显示快捷菜单
- Qt::CustomContextMenu:由用户编程实现创建 并显示快捷菜单
先将属性设置为Qt::CustomContextMenu,再编写槽函数,来自定义实现快捷菜单
void MainWindow::on_listWidget_customContextMenuRequested(const QPoint &pos)
{
//O_UNUSED(pos);
QMenu *menuList=new QMenu(this);
menuList->addAction(ui->action);
menuList->addAction(ui->action_2);
menuList->addAction(ui->action_3);
menuList->addAction(ui->action_4);
menuList->addAction(ui->action_5);
menuList->addAction(ui->action_6);
menuList->addAction(ui->action_7);
menuList->addAction(ui->action_8);
menuList->addAction(ui->action_9);
menuList->addAction(ui->action_10);
//在鼠标光标位置显示快捷菜单
menuList->exec(QCursor::pos());
delete menuList;
}