首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
12赞
370
a
当前位置:
开发笔记
>
编程语言
> 正文
QTableWidget详解(样式、右键菜单、表头塌陷、多选等)2013-10-2310:54:04
作者:DXJ健康快乐 | 来源:互联网 | 2023-03-19 05:32
一、设置表单样式点击(此处)折叠或打开table_widget->setColumnCount(4);设置列数
一、设置表单样式
点击(
此处)折叠或打开
table_widget->setColumnCount(4);
//设置列数
table_widget->horizontalHeader()->setDefaultSectionSize(150);
table_widget->horizontalHeader()->setClickable(false);
//设置表头不可点击(默认点击后进行排序)
//设置表头内容
QStringList header;
header<
table_widget->setHorizontalHeaderLabels(header);
//设置表头字体加粗
QFont font
=
this->horizontalHeader()->font();
font.setBold(true);
table_widget->horizontalHeader()->setFont(font);
table_widget->horizontalHeader()->setStretchLastSection(true);
//设置充满表宽度
table_widget->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
table_widget->verticalHeader()->setDefaultSectionSize(10);
//设置行距
table_widget->setFrameShape(QFrame::NoFrame);
//设置无边框
table_widget->setShowGrid(false);
//设置不显示格子线
table_widget->verticalHeader()->setVisible(false);
//设置垂直头不可见
table_widget->setSelectionMode(QAbstractItemView::ExtendedSelection);
//可多选(Ctrl、Shift、 Ctrl+A都可以)
table_widget->setSelectionBehavior(QAbstractItemView::SelectRows);
//设置选择行为时每次选择一行
table_widget->setEditTriggers(QAbstractItemView::NoEditTriggers);
//设置不可编辑
table_widget->horizontalHeader()->resizeSection(0,150);
//设置表头第一列的宽度为150
table_widget->horizontalHeader()->setFixedHeight(25);
//设置表头的高度
table_widget->setStyleSheet("selection-background-color:lightblue;");
//设置选中背景色
table_widget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}");
//设置表头背景色
//设置水平、垂直滚动条样式
table_widget->horizontalScrollBar()->setStyleSheet("QScrollBar{background:transparent; height:10px;}"
"QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"
"QScrollBar::handle:hover{background:gray;}"
"QScrollBar::sub-line{background:transparent;}"
"QScrollBar::add-line{background:transparent;}");
table_widget->verticalScrollBar()->setStyleSheet("QScrollBar{background:transparent; width: 10px;}"
"QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"
"QScrollBar::handle:hover{background:gray;}"
"QScrollBar::sub-line{background:transparent;}"
"QScrollBar::add-line{background:transparent;}");
好了,样式设置完成,效果如下所示:
问题一:鼠标点击的选项会出现虚框,在Qt官网找到一篇博客专门介绍的,直接上代码!
(1)实现如下一个类
点击(
此处)折叠或打开
#include
"no_focus_delegate.h"
void NoFocusDelegate::paint(QPainter*
painter,
const
QStyleOptionViewItem
&
option,
const
QModelIndex
&index)
const
{
QStyleOptionViewItem itemOption(option);
if
(itemOption.state
&
QStyle::State_HasFocus)
{
itemOption.state
=
itemOption.state ^ QStyle::State_HasFocus;
}
QStyledItemDelegate::paint(painter,
itemOption,
index);
}
(2)表格构造中添加如下代码
点击(
此处)折叠或打开
table_widget->setItemDelegate(new NoFocusDelegate());
OK,虚线边框去除
问题二:当表格只有一行的时候,则表头会出现塌陷问题
摸索了很长时间,才得以解决:
点击(
此处)折叠或打开
//点击表时不对表头行光亮(获取焦点)
table_widget->horizontalHeader()->setHighlightSections(false);
二、操作表单(添加、删除行等)
(1)动态插入行
点击(
此处)折叠或打开
int
row_count
=
table_widget->rowCount();
//获取表单行数
table_widget->insertRow(row_count);
//插入新行
QTableWidgetItem
*item
=
new QTableWidgetItem();
QTableWidgetItem
*item1
=
new QTableWidgetItem();
QTableWidgetItem
*item2
=
new QTableWidgetItem();
QTableWidgetItem
*item3
=
new QTableWidgetItem();
//设置对应的图标、文件名称、最后更新时间、对应的类型、文件大小
item->setIcon(icon);
//icon为调用系统的图标,以后缀来区分
item->setText(name);
item1->setText(last_modify_time);
item2->setText(type);
//type为调用系统的类型,以后缀来区分
item3->setText(size);
table_widget->setItem(row_count,
0,
item);
table_widget->setItem(row_count,
1,
item1);
table_widget->setItem(row_count,
2,
item2);
table_widget->setItem(row_count,
3,
item3);
//设置样式为灰色
QColor color("gray");
item1->setTextColor(color);
item2->setTextColor(color);
item3->setTextColor(color);
(2)在指定位置插入行
其实跟(1)相似,(1)的前提是获取到表格行数
点击(
此处)折叠或打开
table_widget->insertRow(row);
//插入新行 row为插入的位置
三、单击表头触发的事件
(1)连接表头的信号和槽
点击(
此处)折叠或打开
connect(horizontalHeader(),
SIGNAL(sectionClicked(int)),
this,
SLOT(onHeaderClicked(int)));
(2)实现槽函数
点击(
此处)折叠或打开
void TableWidget::onHeaderClicked(int
column)
{
//column为所点击的表头的某列
}
四、打开某行进行编辑
既然模拟Window那么就模仿的像一点,Windows可以修改名称,那么Qt也必然可以实现
点击(
此处)折叠或打开
//获得当前节点并获取编辑名称
QTableWidgetItem
*item
=
table_widget->item(edit_row,
0);
//edit_row为想要编辑的行号
table_widget->setCurrentCell(edit_row,
0);
table_widget->openPersistentEditor(item);
//打开编辑项
table_widget->editItem(item);
//关闭编辑项
table_widget->closePersistentEditor(item);
OK,重命名完成,!
五、右键菜单
(1)创建菜单、菜单项
点击(
此处)折叠或打开
void TableWidget::createActions()
{
//创建菜单项
pop_menu
=
new QMenu();
action_name
=
new QAction(this);
action_size
=
new QAction(this);
action_type
=
new QAction(this);
action_date
=
new QAction(this);
action_open
=
new QAction(this);
action_download
=
new QAction(this);
action_flush
=
new QAction(this);
action_delete
=
new QAction(this);
action_rename
=
new QAction(this);
action_create_folder
=
new QAction(this);
action_open->setText(QString("打开"));
action_download->setText(QString("下载"));
action_flush->setText(QString("刷新"));
action_delete->setText(QString("删除"));
action_rename->setText(QString("重命名"));
action_create_folder->setText(QString("新建文件夹"));
action_name->setText(QString("名称"));
action_size->setText(QString("大小"));
action_type->setText(QString("项目类型"));
action_date->setText(QString("修改日期"));
//设置快捷键
action_flush->setShortcut(QKeySequence::Refresh);
//设置文件夹图标
action_create_folder->setIcon(icon);
QObject::connect(action_create_folder,
SIGNAL(triggered()),
this,
SLOT(createFolder()));
}
(2)重新实现contextMenuEvent
点击(
此处)折叠或打开
void TableWidget::contextMenuEvent(QContextMenuEvent
*event)
{
pop_menu->clear();
//清除原有菜单
QPoint point
=
event->pos();
//得到窗口坐标
QTableWidgetItem
*item
=
this->itemAt(point);
if(item
!=
NULL)
{
pop_menu->addAction(action_download);
pop_menu->addAction(action_flush);
pop_menu->addSeparator();
pop_menu->addAction(action_delete);
pop_menu->addAction(action_rename);
pop_menu->addSeparator();
pop_menu->addAction(action_create_folder);
sort_style
=
pop_menu->addMenu("排序");
sort_style->addAction(action_name);
sort_style->addAction(action_size);
sort_style->addAction(action_type);
sort_style->addAction(action_date);
//菜单出现的位置为当前鼠标的位置
pop_menu->exec(QCursor::pos());
event->accept();
}
}
OK,大功告成!
六、信号
void cellActivated(int row, int column)
void cellChanged(int row, int column)
void cellClicked(int row, int column)
void cellDoubleClicked(int row, int column)
void cellEntered(int row, int column)
void cellPressed(int row, int column)
void itemActivated(QTableWidgetItem *item)
void itemChanged(QTableWidgetItem *item)
void itemClicked(QTableWidgetItem *item)
void itemDoubleClicked(QTableWidgetItem *item)
void itemEntered(QTableWidgetItem *item)
void itemPressed(QTableWidgetItem *item)
void itemSelectionChanged()
void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
到这里,还有一点遗留问题,关于界面的文件(文件夹)图标和类型怎么显示的?又怎么区别什么时候显示什么样的图标呢?如果图标和类型写死的话必不可行,因为不同后缀的文件至少也有100种以上吧!这里提示一下,可以调用系统API获取当前系统的指定文件(通过后缀区分)对应的类型以及图标。。。
这些都是在接触Qt以来总结的一些小经验,希望对大家有用!
get
widget
header
default
io
string
list
label
view
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
ip
AngularJs v1.6.6,使用window.print()打印报表实现
原先使用GridReport6打印报表,由于这个插件对于浏览器支持不到位,所以放弃使用了。所以考虑的做一个可以可以直接使用浏览器默认的打印方式实现 ...
[详细]
蜡笔小新 2023-03-21 00:09:40
java
这个原型GUI在Java中是否可行
如何解决《这个原型GUI在Java中是否可行》经验,为你挑选了1个好方法。 ...
[详细]
蜡笔小新 2023-03-20 19:42:56
java
AspectJ可以通过sun.net。*软件包进行编织吗?
如何解决《AspectJ可以通过sun.net。*软件包进行编织吗?》经验,为你挑选了1个好方法。 ...
[详细]
蜡笔小新 2023-03-20 23:03:53
java
Camel处理器单元/集成测试
如何解决《Camel处理器单元/集成测试》经验,为你挑选了1个好方法。 ...
[详细]
蜡笔小新 2023-03-20 22:40:55
java
SpringMVC第二篇【过滤编码器、注解开发、requestMapping、业务方法与传统参数】...
tags:SpringMVCSpringMVC过滤编码器在SpringMVC的控制器中,如果没有对编码进行任何的操作,那么获取到的中文数据是乱码 ...
[详细]
蜡笔小新 2023-03-20 21:32:35
java
高仿微信图片放大拖动浏览,自定义ImageView
<pre>现在基本上每个项目中都有大量的图片,用户习惯了双击放大,然后拖动平移它,如果还是简单的只能看下图那用户不得骂死,最近的项目中就有类似朋友圈的功能模块,查看用户发的图片 ...
[详细]
蜡笔小新 2023-03-20 19:27:50
ip
用Girdview完成九宫格
用GridView完成九宫格先上一下效果图,原谅我懒,图片懒得找了,就都弄一样的吧。。然后这个九宫格主要是用到了GridView以及Adapter将他俩绑定一下,就可以了用到了3个1个主的Ma ...
[详细]
蜡笔小新 2023-03-20 19:12:28
grid
tkinter Treeview小部件插入数据
如何解决《tkinterTreeview小部件插入数据》经验,为你挑选了1个好方法。 ...
[详细]
蜡笔小新 2023-03-20 18:46:23
java
尝试在空对象引用上调用虚方法'void android.widget.GridView.setAdapter(android.widget.ListAdapter)'
如何解决《尝试在空对象引用上调用虚方法'voidandroid.widget.GridView.setAdapter(android.widget.ListAdapter)'》经验,为你挑选了1个好方法。 ...
[详细]
蜡笔小新 2023-03-20 18:45:38
java
扫描后ZXing双重图像/叠加
如何解决《扫描后ZXing双重图像/叠加》经验,谁能帮忙解答一下? ...
[详细]
蜡笔小新 2023-03-20 23:49:41
settings
ASP.NET 本地化 (localization)
简要:.NET支持Windows和Web应用程序的全球化和本地化。要使应用程序全球化,可以使用System.Globalization命名空间中的类 ...
[详细]
蜡笔小新 2023-03-20 23:36:29
java
android Contacts/Acore进程常常被Kill,导致联系人开机后丢失怎么办?
ContactsAcore进程,在内存较少和开机进程过多的情况下会常常被ActivityManagerKill掉。导致Sim卡联系人开机后未导入或者仅仅导入一部分,造成联系人丢失的 ...
[详细]
蜡笔小新 2023-03-20 23:06:59
go
Runtime之概念,功能和怎么使用
Runtime前言虽然作者接触ios开发有1年半的时间了,但是对runtime的理解还有有些压力的,毕竟太抽象的东西,再开发中也是很少用到的,网上有太多的解析Runtime的文章,大 ...
[详细]
蜡笔小新 2023-03-20 22:53:28
grid
Flutter 设置Container高度自适应GridView 或Listview
Flutter 设置Container高度自适应GridView 或Listview ...
[详细]
蜡笔小新 2023-03-20 20:06:36
js
oracle下载配置文件,oracle 11G、12C BBED 配置和库文件下载!
BBED是oracle内部工具,BBED(OracleBlockBrowerandEDitorTool),顾名思义就是用来直接查看和修改数据文件数据的工 ...
[详细]
蜡笔小新 2023-03-20 19:03:26
DXJ健康快乐
这个家伙很懒,什么也没留下!
Tags | 热门标签
loops
iostream
cpython
perl
vbscript
cmd
c语言
settings
header
join
node.js
php8
version
erlang
merge
future
js
buffer
char
metadata
flutter
spring
dockerfile
go
grid
java
foreach
ip
export
datetime
RankList | 热门文章
1
unity free asset
2
mysql concat 、concat_ws group_concat函数用法
3
在嵌套的Polymer自定义元素中访问JavaScript方法
4
img base64
5
第一行红字 加粗 如果要实现这一效果 对应的html语句,前端基础
6
与版本化API的命名空间URL基本相反
7
org.activiti.engine.RuntimeService.signalEventReceivedAsyncWithTenantId()方法的使用及代码示例
8
hdu 1671 Phone List(字典树)题解
9
Springboot内置的工具类之StringUtils
10
电子:将原始html注入BrowserWindow
11
Linux服务器架设笔记Squid服务器配置
12
当数组变量是volatile时,我们是否需要同步对数组的访问?
13
Textarea javaFx颜色
14
将第一个匹配项替换为R中字符串的结尾
15
jsplumb应用场景快速开发
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有