【Qt之·类QTableView】

系列文章目录



前言

  • QTableView类是Qt提供的用于显示表格数据的控件,继承自QAbstractItemView类。它提供了灵活的数据显示和编辑功能,还可以与QAbstractTableModel类或其子类一起使用,实现自定义数据模型。

  • QTableView类可以显示横向和纵向的表头,支持用户拖拽和调整列宽、行高、列顺序和排序等操作。还可以将数据分组(通过指定行或列),并为每个组设置标题,以便更好地组织和展示数据。

  • QTableView类还提供了多种视图模式(如表格模式、列表模式、图标模式等),可以根据需要自由切换。同时,它也支持单元格选择、多行多列选择和复制粘贴等操作。

  总之,QTableView类是Qt中非常重要的一个控件,可以非常方便地用于显示表格数据和进行数据的编辑和操作。,本文就介绍了机器学习的基础内容。


一、常用属性设置

列宽等间距

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 平分
ui->tableView->verticalHeader()->setDefaultSectionSize(30); //所有列的默认行高
ui->tableView->horizontalHeader()->setStretchLastSection(true); //将最后一列填充满表格

1.设置表格的表头

/* 设置垂直表格头的显示、对齐方式、高宽等,水平表格头类似 */
this->horizontalHeader()->setVisible(false); // 隐藏水平表头
ui->tableView->verticalHeader()->hide(); //隐藏垂直表头
this->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);  // 设置水平表头为左对齐
this->verticalHeader()->setDefaultAlignment(Qt::AlignBottom); // 设置垂直表头为底对齐
this->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); // 固定表格宽度不可扩展,不可手动调整宽度
this->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); // 表格宽度随内容自动扩展
this->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 表格宽度自动根据UI进行计算,不可手动调整宽度
this->verticalHeader()->setMinimumSectionSize(ITEM_HEIGHT);
this->verticalHeader()->setDefaultSectionSize(ITEM_HEIGHT);

2.设置表格的线属性

this->setShowGrid(false); // 隐藏网格线
this->setGridStyle(Qt::DotLine); // 线的样式
this->setFocusPolicy(Qt::NoFocus); // 取消Item选中后的虚线边框

3.设置表格的选中模式等

this->setWordWrap(false); // 文本过长不换行
this->setEditTriggers(QAbstractItemView::NoEditTriggers); // 设置不可编辑
this->setSelectionMode(QAbstractItemView::NoSelection); // 设置不可被选中
this->setSelectionBehavior(QAbstractItemView::SelectRows); // 设置选中一整行
this->setSelectionMode (QAbstractItemView::SingleSelection); // 只允许选中单行
//this->setSelectionMode (QAbstractItemView::ExtendedSelection); // 允许选中多行

4.设置表格的内置滚动条

this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); // 显示垂直滑动条
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏水平滑动条
this->setVerticalScrollMode(QTableView::ScrollPerPixel); // 垂直滚动条设置为像素滚动
this->verticalScrollBar()->setSingleStep(ITEM_HEIGHT/3); // 设置滚动条步长(要先设置为像素滚动,才能生效;ITEM_HEIGHT为项的高度)

5.其它

model->item(0,0)->setTextAlignment(Qt::AlignCenter); //设置模型文本对齐方式
model->item(0,0)->setForeground(Qt::red); //设置字体颜色

6.其它

this->verticalHeader()->setHidden(true); // 隐藏默认行号
this->setIconSize(QSize(30, 30)); // 设置icon尺寸大小(否则显示的图标尺寸很小,即使实际图片文件很大)
this->setDragEnabled(false); // 禁用拖拽,否则此处添加拖拽的话会生成两个item
this->setMouseTracking(true); // 设置鼠标追踪,下面的entered才会触发槽函数

二、给QStandardItemModel设置数据

  通过调试QStandardItemModel.cpp的源码可知,setItem()在设置每一个item时都需要进行new QStandardItem的构造,当这个数据量是几万行时会构造数十万次QStandardItem,而setData()则是直接为指定的indexd对应的item设置值,省去了构造,前提是设置了rowCount()和columnCount(),否则setData()是无效的。

1.setData()

model->setRowCount(10);
model->setColumnCount(10);
model->setData(table_model->index(i, j), "USB_DISK", Qt::DisplayRole);

1.setItem()

QStandardItem *item = new QStandardItem("USB_DISK);
table_model->setItem(row, column, item);

三、用法示例

示例1

QStandardItemModel* model = new QStandardItemModel();
    ui->tableView->setModel(model);
    ui->tableView->setFocusPolicy(Qt::NoFocus); //去掉选中单元格时的虚框
    ui->tableView->horizontalHeader()->hide();
    model->setHorizontalHeaderLabels({"", ""});
//    ui->tableView->verticalHeader()->setHidden(true);

    ui->tableView->verticalHeader()->setDefaultSectionSize(100);
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    model->setItem(0, 0, new QStandardItem("伺服从站类型"));

    QComboBox* cmb = new QComboBox();
    cmb->addItems({"通用", "英威腾", "摩通", "禾川", "松下", "高创", "台达", "雷赛", "清能德创"});
    ui->tableView->setIndexWidget(model->index(0, 1), cmb);

    model->setItem(1, 0, new QStandardItem("伺服从站类型"));

    cmb = new QComboBox();
    cmb->addItems({"通用", "英威腾", "摩通", "禾川", "松下", "高创", "台达", "雷赛", "清能德创"});
    ui->tableView->setIndexWidget(model->index(1, 1), cmb);

    ui->tableView->setCurrentIndex(ui->tableView->model()->index(0,3));

示例2

 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    QStandardItemModel *model = new QStandardItemModel;
    model->setColumnCount(1);
    model->setRowCount(1);

    ui->tableView->setModel(model);

    model->setHorizontalHeaderLabels({"外部设备"});
//    model->setVerticalHeaderLabels({"1"});

//    model->setItem(0,0,new QStandardItem("USB_DISK"));
    model->setData(model->index(0,0),"USB_DISK",Qt::DisplayRole);
    model->item(0,0)->setTextAlignment(Qt::AlignCenter); //设置模型文本对齐方式
    model->item(0,0)->setForeground(Qt::red); //设置字体颜色
    on_tableView_clicked(model->index(0,0)); //通过槽函数调用实现点击效果

总结

以上就是QTableView的内容,本文仅仅简单介绍了 的使用,而QTableView类提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt中的QComboBox是一个下拉列表框控件,可以用于选择单个项。它提供了一组方法和信号槽来管理下拉框中的项,可以方便地添加、删除和修改选项。 QTableView是一个表格视图控件,可以用于显示二维数据。它通过提供模型-视图的机制,将数据与表格视图分离,使得数据的管理和展示更加灵活。QTableView可以显示不同的模型,并提供了编辑、排序和过滤等功能。 在使用QComboBox和QTableView时,可以结合使用两者来实现一些复杂的功能。例如,可以将QComboBox用作QTableView的筛选条件选择器。利用QComboBox的信号槽机制,在选择不同的筛选条件时,响应的更新QTableView的内容,从而实现数据的动态过滤显示。 另外,还可以使用QComboBox来选择QTableView中的编辑项。用户可以通过下拉框选择要编辑的或列,然后通过QTableView提供的函数来修改表格中的数据。这样,用户可以方便地对表格的特定内容进编辑和管理。 总之,Qt的QComboBox和QTableView是两个非常有用的控件,可以分别用于选择和展示数据。通过巧妙地结合使用,可以实现一些复杂的功能,提高用户体验和开发效率。 ### 回答2: Qt是一款流的跨平台的C++开发框架,提供了丰富的图形用户界面(GUI)工具。QComboBox是Qt中的一个组件,它是一个下拉列表框,允许用户选择一个或多个选项。QTableViewQt中的另一个组件,它是一个表格视图,用于显示二维数据。 QComboBox和QTableView可以很好地结合使用,以提供更丰富和交互性的用户界面。例如,可以将QComboBox用作QTableView的过滤器,允许用户选择不同的选项来过滤和显示特定的数据。 要在QComboBox中显示选项,可以使用addItem()方法添加选项,也可以使用setModel()方法设置数据模型。在QTableView中显示数据,通常需要使用QStandardItemModel或QAbstractTableModel作为数据模型,并使用setModel()方法将其设置给QTableView。 在QComboBox中选择选项后,可以通过信号和槽机制来响应选择的变化,并更新QTableView中显示的数据。例如,可以在QComboBox的currentIndexChanged()信号的槽函数中,根据选择的选项更新QTableView的数据模型,然后通过重新设置数据模型更新QTableView的显示。 除了基本功能外,还可以通过自定义QComboBox和QTableView的样式和控件来实现更丰富的用户界面。还可以使用QComboBox的其他方法,如currentIndex()获取当前选择的索引,currentText()获取当前选择的文本等。 总而言之,Qt的QComboBox和QTableView组件为开发者提供了一种方便和灵活的方式来处理下拉列表和表格数据,使用户界面更加友好和交互性。 ### 回答3: Qt是一种跨平台的C++应用程序开发框架,提供了丰富的UI控件和功能模块,其中包括QComboBox和QTableView。 QComboBox是用来显示和选择多个选项中的一个的下拉列表控件。它的特点是可以添加多个选项,用户可以通过下拉列表来选择不同的选项。QComboBox可以实现单选和多选功能,还可以通过信号和槽机制来响应用户的选择动作。 QTableView是用来显示二维表格数据的控件。它以表格的形式将数据呈现给用户,用户可以通过鼠标或键盘来对表格进操作,例如选择单元格、编辑单元格内容、排序、过滤等。QTableView还支持数据模型和视图的分离,可以通过自定义的数据模型来呈现不同的数据型。 在使用Qt中的QComboBox和QTableView时,可以通过不同的方法来设置和获取它们的属性,例如设置选项列表、设置显示文本、设置当前选项、设置表格数据、设置表头等。还可以通过信号和槽机制来处理用户的交互操作,例如响应选项选择事件、响应表格数据变化事件等。 QComboBox和QTableView都可以通过样式表来进界面的美化,并且可以通过自定义子来扩展其功能。同时,Qt提供了丰富的文档和示例代码,方便开发者学习和使用这些控件。 总之,Qt中的QComboBox和QTableView是常用的UI控件,可以方便地实现下拉列表和表格数据的展示和交互操作。通过灵活的属性设置和信号槽机制,能够满足不同的使用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值