Qt QTableWidget及基本操作(详解版)

QTableWidget 是 Qt 中的表格组件类。在窗体上放置一个 QTableWidget 组件后,可以在 Property Editor 里对其进行属性设置,双击这个组件,可以打开一个编辑器,对其 Colum、Row 和 Item 进行编辑。

一个 QTableWidget 组件的界面基本结构如图 1 所示,这个表格设置为 6 行 5 列。



图 1 一个 QTableWidget 表格的基本结构和工作区的行、列索引号


表格的第 1 行称为行表头,用于设置每一列的标题,第 1 列称为列表头,可以设置其标题,但一般使用缺省的标题,即为行号。行表头和列表头一般是不可编辑的。

除了行表头和列表头之外的表格区域是内容区,内容区是规则的网格状,如同一个二维数组,每个网格单元称为一个单元格。每个单元格有一个行号、列号,图 1 表示了行号、列号的变化规律。

在 QTableWidget 表格中,每一个单元格是一个 QTable Widgetltem 对象,可以设置文字内容、字体、前景色、背景色、图标,也可以设置编辑和显示标记。每个单元格还可以存储一个 QVariant 数据,用于设置用户自定义数据。



图 2 实例 Samp4_9 的运行时界面


实例 samp4_9 以 QTableWidget 为主要组件,演示 QTableWidget 一些主要操作的实现。实例运行时的界面如图 2 所示,该实例将演示以下功能的实现方法:

  • 设置表格的列数和行数,设置表头的文字、格式等。
  • 初始化表格数据,设置一批实例数据填充到表格里。
  • 插入行、添加行、删除当前行的操作。
  • 遍历表格所有单元格,读取表格内容到一个 QPlainTextEdit 里,表格的一行数据作为一行文本。
  • 表格上选择的当前单元格变化时,在状态栏显示单元格存储的信息。

界面设计与初始化

Samp4_9 的主窗体从 QMainWindow 继承而来。在图 2 所示的窗口上,一个 QTableWidget 组件和一个 QPlainTextEdit 组件组成上下分割布局 splitter。左侧的按钮都放在一个 QGroupBox 组件里,釆用 Grid 布局,然后将 groupBox 与 splitter 采用左右分割布局。这是一个典型的三区分割的布局。

在主窗口类 MainWindow 里自定义了一些变量和函数,用于后面的代码实现,下面是在 MainWindow 的 private 部分自定义的变量和函数:

private:
    //自定义单元格Type的类型,在创建单元格的item时使用
    enum CellType{ctName=1000,ctSex,ctBirth,ctNation,ctPartyM,ctScore};
    //各字段在表格中的列号
    enum FieldColNum{colName=0,colSex,colBirth,colNation,colScore,colPartyM};
    QLabel *labCellIndex; //状态栏上用于显示单元格的行号、列号
    QLabel *labCellType; //状态栏上用于显示单元格的type
    QLabel *labStudID; //状态栏上用于显示学号
    void createItemsARow(int rowNo,QString Name,QString Sex,QDate birth,QString Nation,bool isPM,int score) ; //为某一行创建 items

枚举类型 CellType 是用来表示单元格类型的,在创建单元格时使用。枚举类型 FieldColNum 用枚举常量表示各字段在表格中的列号。

在 MainWindow 的构造函数里对界面进行初始化,代码如下:

 
  1. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
  2. {
  3. ui->setupUi(this);
  4. setCentralWidget(ui->splitterMain);
  5. //状态栏初始化创建
  6. labCellIndex = new QLabel ("当前单元格坐标:", this);
  7. labCellIndex->setMinimumWidth(250);
  8. labCellType=new QLabel ("当前单元格类型:",this);
  9. labCellType->setMinimumWidth(200);
  10. labStudID=new QLabel ("学生ID: ", this);
  11. labStudID->setMinimumWidth(200);
  12. ui->statusBar->addWidget (labCellIndex) ; //加到状态栏
  13. ui->statusBar->addWidget(labCellType);
  14. ui->statusBar->addWidget(labStudID);
  15. }

QTableWidget 基本操作

设置表头

界面上的“设置表头”按钮实现对表头的设置,其 clicked() 信号的槽函数代码如下:

 
  1. void MainWindow::on_btnSetHeader_clicked()
  2. { //设置表头
  3. QTableWidgetItem *headerItem;
  4. QStringList headerText;
  5. headerText<<"姓 名"<<"性 别"<<"出生日期"<<"民 族"<<"分数"<<"是否党员"; //表头标题用QStringList来表示
  6. //ui->tableInfo->setHorizontalHeaderLabels(headerText);
  7. ui->tableInfo->setColumnCount(headerText.count());//列数设置为与 headerText的行数相等
  8. for (int i=0;i<ui->tableInfo->columnCount();i++)//列编号从0开始
  9. {
  10. //cellItem=ui->tableInfo->horizontalHeaderItem(i);
  11. headerItem=new QTableWidgetItem(headerText.at(i)); //新建一个QTableWidgetItem, headerText.at(i)获取headerText的i行字符串
  12. QFont font=headerItem->font();//获取原有字体设置
  13. font.setBold(true);//设置为粗体
  14. font.setPointSize(12);//字体大小
  15. headerItem->setTextColor(Qt::red);//字体颜色
  16. headerItem->setFont(font);//设置字体
  17. ui->tableInfo->setHorizontalHeaderItem(i,headerItem); //设置表头单元格的Item
  18. }
  19.  
  20. ui->tableInfo->setItemDelegateForColumn(colScore,&spinDelegate);//设置自定义代理组件
  21. }

行表头各列的文字标题由一个 QStringList 对象 headerText 初始化存储,如果只是设置行表头各列的标题,使用下面一行语句即可:

ui->tableInfo->setHorizontalHeaderLabels(headerText);

如果需要进行更加具体的格式设置,需要为行表头的每个单元格创建一个 QTableWidgetItem 类型的变量,并进行相应设置。

在一个表格中,不管是表头还是工作区,每个单元格都是一个 QTableWidgetItem 对象。QTableWidgetItem 对象存储了单元格的所有内容,包括字标题、格式设置,以及关联的数据。上面程序中的 for 循环遍历 headerText 的每一行,用每一行的文字创建一个 QTableWidgetItem 对象 headerltem,然后设置 headerItem 的字体大小为 12、粗体、红色,然后将 headerltem 赋给表头的某一列:

ui->tableInfo->setHorizontalHeaderItern (i, headerItem);

初始化表格数据

界面上的“初始化表格数据”按钮根据表格的行数,生成数据填充表格,并为每个单元格生成 QTableWidgetItem 对象,设置相应属性。下面是 btnlniData 的 clicked() 信号的槽函数代码:

 
  1. void MainWindow::on_btnIniData_clicked()
  2. { //初始化表格内容
  3. QString strName,strSex;
  4. bool isParty=false;
  5.  
  6. QDate birth;
  7. birth.setDate(1980,4,7);//初始化一个日期
  8. ui->tableInfo->clearContents();//只清除工作区,不清除表头
  9.  
  10. int Rows=ui->tableInfo->rowCount(); //数据区行数,
  11. for (int i=0;i<Rows;i++) //数据区第1行的编号为0,所以范围是0~rowCount()-1
  12. {
  13. strName=QString::asprintf("学生%d",i); //学生姓名
  14. if ((i % 2)==0) //分奇数,偶数行设置性别,及其图标
  15. strSex="男";
  16. else
  17. strSex="女";
  18.  
  19. createItemsARow(i, strName, strSex, birth,"汉族",isParty,70); //为某一行创建items
  20.  
  21. birth=birth.addDays(20); //日期加20天
  22. isParty =!isParty;
  23. }
  24. }

QTableWidget::clearContents() 函数清除表格数据区的所有内容,但是不清除表头。

QTableWidget::rowCount() 函数返回表格数据区的行数。

在 for 循环里为每一行生成需要显示的数据,然后调用自定义函数 createItemsARow(),为表格一行的各个单元格生成 QTableWidgetItem 对象。

createItemsARow() 是在窗体类里自定义的函数,其实现代码如下:

 
  1. void MainWindow::createItemsARow(int rowNo,QString Name,QString Sex,QDate birth,QString Nation,bool isPM,int score)
  2. { //为一行的单元格创建 Items
  3. QTableWidgetItem *item;
  4. QString str;
  5. uint StudID=201605000; //学号基数
  6.  
  7. //姓名
  8. //新建一个Item,设置单元格type为自定义的MainWindow::ctName
  9. item=new QTableWidgetItem(Name,MainWindow::ctName);
  10. item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //文本对齐格式
  11. StudID +=rowNo; //学号=基数+ 行号
  12. item->setData(Qt::UserRole,QVariant(StudID)); //设置studID为data
  13. ui->tableInfo->setItem(rowNo,MainWindow::colName,item); //为单元格设置Item
  14.  
  15. //性别
  16. QIcon icon;
  17. if (Sex=="男")
  18. icon.addFile(":/images/icons/boy.ico");
  19. else
  20. icon.addFile(":/images/icons/girl.ico");
  21. item=new QTableWidgetItem(Sex,MainWindow::ctSex); //新建一个Item,设置单元格type为自定义的 MainWindow::ctSex
  22. item->setIcon(icon);
  23. item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//为单元格设置Item
  24. ui->tableInfo->setItem(rowNo,MainWindow::colSex,item);//为单元格设置Item
  25.  
  26. //出生日期
  27. str=birth.toString("yyyy-MM-dd"); //日期转换为字符串
  28. item=new QTableWidgetItem(str,MainWindow::ctBirth);//新建一个Item,设置单元格type为自定义的 MainWindow::ctBirth
  29. item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); //文本对齐格式
  30. ui->tableInfo->setItem(rowNo,MainWindow::colBirth,item);//为单元格设置Item
  31.  
  32. //民族
  33. item=new QTableWidgetItem(Nation,MainWindow::ctNation); //新建一个Item,设置单元格type为自定义的 MainWindow::ctNation
  34. item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式
  35. ui->tableInfo->setItem(rowNo,MainWindow::colNation,item);//为单元格设置Item
  36.  
  37. //是否党员
  38. item=new QTableWidgetItem("党员",MainWindow::ctPartyM);//新建一个Item,设置单元格type为自定义的 MainWindow::ctPartyM
  39. item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式
  40. if (isPM)
  41. item->setCheckState(Qt::Checked);
  42. else
  43. item->setCheckState(Qt::Unchecked);
  44. item->setBackgroundColor(Qt::yellow);//Qt::green lightGray yellow
  45. ui->tableInfo->setItem(rowNo,MainWindow::colPartyM,item);//为单元格设置Item
  46.  
  47. //分数
  48. str.setNum(score);
  49. item=new QTableWidgetItem(str,MainWindow::ctScore);//新建一个Item,设置单元格type为自定义的 MainWindow::ctPartyM
  50. item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式
  51. ui->tableInfo->setItem(rowNo,MainWindow::colScore,item);//为单元格设置Item
  52. }

该表格的每一行有5列,为每一个单元格都创建一个 QTableWidgetItem 类型的变量 item,并做相应的设置。

创建 QTableWidgetItem 使用的构造函数的原型为:

QTableWidgetItem::QTableWidgetItem (const QString &text, int type = Type)

其中,第一个参数作为单元格的显示文字,第二个参数作为节点的类型。

例如创建“姓名”单元格对象时的语句是:

cellItem=new QtableWidgetItem(Name,MainWindow::ctName);

其中,MainWindow::ctName 是定义的枚举类型 CellType 的一个常量值。

“姓名”单元格还调用 setData() 函数设置了一个自定义的数据,存储的是学生 ID。

cellItem->setData(Qt::UserRole,QVariant(StudID));

这个自定义数据是不显示在界面上的,但是与单元格相关联。

QTableWidgetItem 有一些函数对单元格进行属性设置,如下:

  • setTextAlignment (int alignment):设置文字对齐方式。
  • setBackground(const QBrush &brush):设置单元格背景颜色。
  • setForeground(const QBrush &brush):设置单元格前景色。
  • setIcon(const QIcon &icon):为单元格设置一个显不图标。
  • setFont(const QFont &font):为单元格显示文字设置字体。
  • setCheckState(Qt::CheckState state):设置单元格勾选状态,单元格里出现一个QCheckBox组件。
  • setFlags(Qt::ItemFlags flags):设置单元格的一些属性标记。


设置好 item 的各种属性之后,用 QTableWidget 的 setItem 函数将 item 设置为单元格的项,例如:

ui->tableInfo->setItem(rowNo,MainWindow::colName,item);

其中,MainWindow::colName 是定义的枚举类型 FieldColNum 的一个常量值。

这样初始化设置后,就可以得到如图 2 所示的运行时的表格内容。表格里并没有显示学号,学号是“姓名”单元格的关联数据。

获得当前单元格数据

当鼠标在表格上单击单元格时,被选中的单元格是当前单元格。通过 QTableWidget 的 currentColumn() 和 currentRow() 可以获得当前单元格的列编号和行编号。

当前单元格发生切换时,会发射 currentCellChanged() 信号和 currentItemChanged() 信号,两个信号都可以利用,只是传递的参数不同。

对 currentCellChanged() 信号编写槽函数,用于获取当前单元格的数据,以及当前行的学生的学号信息,代码如下:

 
  1. void MainWindow::on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
  2. {//当前选择单元格发生变化时的响应
  3. Q_UNUSED(previousRow);
  4. Q_UNUSED(previousColumn);
  5.  
  6. QTableWidgetItem* item=ui->tableInfo->item(currentRow,currentColumn); //获取单元格的 Item
  7. if (item==NULL)
  8. return;
  9.  
  10. labCellIndex->setText(QString::asprintf("当前单元格坐标:%d 行,%d 列",currentRow,currentColumn));
  11.  
  12. int cellType=item->type();//获取单元格的类型
  13. labCellType->setText(QString::asprintf("当前单元格类型:%d",cellType));
  14.  
  15. item=ui->tableInfo->item(currentRow,MainWindow::colName); //取当前行第1列的单元格的 item
  16. int ID=item->data(Qt::UserRole).toInt();//读取用户自定义数据
  17. labStudID->setText(QString::asprintf("学生ID:%d",ID));//学生ID
  18. }

在 currentCellChanged() 信号中,传递的参数 currentRow 和 currentColumn 表示当前单元格的行号和列号,通过这两个编号可以得到单元格的 QTableWidgetltem 对象 item。

获得 item 之后,通过 type() 函数得到单元格的类型参数,这个类型就是为单元格创建 QTableWidgetItem 对象时传递的类型参数。

再获取同一行的“姓名”单元格的项,用data()函数提取自定义数据,也就是创建单元格时存储的学生 ID。

插入、添加、删除行

QTableWidget 处理行操作的函数如下:

  • insertRow(int row):在行号为row的行前面插入一行,如果row等于或大于总行数,则在表格最后添加一行。insertRow()函数只是插入一个空行,不会为单元格创建QTableWidgetItem对象,需要手工为单元格创建。
  • removeRow(int row):删除行号为 row 的行。


下面是界面上“插入行” “添加行”“删除当前行”按钮的响应代码。在插入行之后,会调用 createItemsARow() 函数,为新创建的空行的各单元格构造 QTableWidgetItem 对象:

 
  1. void MainWindow::on_btnInsertRow_clicked()
  2. { //插入一行
  3. //int curRow;
  4. int curRow=ui->tableInfo->currentRow();//当前行号
  5.  
  6. ui->tableInfo->insertRow(curRow); //插入一行,但不会自动为单元格创建item
  7. createItemsARow(curRow, "新学生", "男",
  8. QDate::fromString("1990-1-1","yyyy-M-d"),"苗族",true,60 ); //为某一行创建items
  9. }
  10. void MainWindow::on_btnAppendRow_clicked()
  11. { //添加一行
  12. //int curRow;
  13. int curRow=ui->tableInfo->rowCount();//当前行号
  14. ui->tableInfo->insertRow(curRow);//在表格尾部添加一行
  15. createItemsARow(curRow, "新生", "女",
  16. QDate::fromString("2000-1-1","yyyy-M-d"),"满族",false,50 ); //为某一行创建items
  17. }
  18. void MainWindow::on_btnDelCurRow_clicked()
  19. {//删除当前行及其items
  20. //int curRow;
  21. int curRow=ui->tableInfo->currentRow();//当前行号
  22. ui->tableInfo->removeRow(curRow); //删除当前行及其items
  23. }

自动调整行高和列宽

QTableWidget 有几个函数自动调整表格的行高和列宽,分别如下:

  • resizeColumnsToContents():自动调整所有列的宽度,以适应其内容。
  • resizeColumnToContents(int column):自动调整列号为 co/www 的列的宽度。
  • resizeRowsToContents():自动调整所有行的高度,以适应其内容。
  • resizeRowToContents(int row):自动调整行号为 raw 的行的高度。

这几个函数实际上是 QTableWidget 的父类 QTableView 的函数。

其他属性控制

  • 设置表格内容是否可编辑:QTableWidget 的 EditTriggers 属性表示是否可编辑,以及进入编辑状态的方式。界面上的"表格可编辑"复选框的槽函数代码为:
     
    1. void MainWindow::on_chkBoxTabEditable_clicked(bool checked)
    2. { //设置编辑模式
    3. if (checked)
    4. //双击或获取焦点后单击,进入编辑状态
    5. ui->tableInfo->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);
    6. else
    7. ui->tableInfo->setEditTriggers(QAbstractItemView::NoEditTriggers); //不允许编辑
    8. }
  • 设置行表头、列表头是否显示:horizontalHeader()获取行表头,verticalHeader()获取列表头,然后可设置其可见性。
     
    1. void MainWindow::on_chkBoxHeaderH_clicked(bool checked)
    2. {
    3. //是否显示水平表头
    4. ui->tableInfo->horizontalHeader()->setVisible(checked);
    5. }
    6. void MainWindow::on_chkBoxHeaderV_clicked(bool checked)
    7. {
    8. //是否显示垂直表头
    9. ui->tableInfo->verticalHeader()->setVisible(checked);
    10. }
  • 间隔行底色:setAltematingRowColors() 函数可以设置表格的行是否用交替底色显示,若为交替底色,则间隔的一行会用灰色作为底色。具体底色的设置需要用 styleSheet,在后续章节会有介绍。
     
    1. void MainWindow::on_chkBoxRowColor_clicked(bool checked)
    2. {
    3. ui->tableInfo->setAlternatingRowColors(checked);
    4. }
  • 选择模式:setSelectionBehavior() 函数可以设置选择方式为单元格选择,还是行选择:
     
    1. void MainWindow::on_rBtnSelectItem_clicked()
    2. {//选择行为:单元格选择
    3. ui->tableInfo->setSelectionBehavior(QAbstractltemView::Selectltems);
    4. }
    5. void MainWindow::on_rBtnSelectRow_clicked()
    6. {//选择行为:行选择
    7. ui->tableInfo->setSelectionBehavior(QAbstractltemView::SelectRows);
    8. }

遍历表格读取数据

“读取表格内容到文本”按钮演示了将表格数据区的内容全部读出的方法,它将每个单元格的文字读出,同一行的单元格的文字用空格分隔开,作为文本的一行,然后将这行文字作为文本编辑器的一行内容,代码如下:

  1. void MainWindow::on_btnReadToEdit_clicked()
  2. {//将 QTableWidget的所有行的内容提取字符串,显示在QPlainTextEdit里
  3. QString str;
  4. QTableWidgetItem *cellItem;
  5.  
  6. ui->textEdit->clear(); //文本编辑器清空
  7. for (int i=0;i<ui->tableInfo->rowCount();i++) //逐行处理
  8. {
  9. str=QString::asprintf("第 %d 行: ",i+1);
  10. for (int j=0;j<ui->tableInfo->columnCount()-1;j++) //逐列处理,但最后一列是check型,单独处理
  11. {
  12. cellItem=ui->tableInfo->item(i,j); //获取单元格的item
  13. str=str+cellItem->text()+" "; //字符串连接
  14. }
  15. cellItem=ui->tableInfo->item(i,colPartyM); //最后一列,党员
  16. if (cellItem->checkState()==Qt::Checked) //根据check状态显示文字
  17. str=str+"党员";
  18. else
  19. str=str+"群众";
  20. ui->textEdit->appendPlainText(str); //添加到编辑框作为一行
  21. }
  22. }
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt中,QTableWidget是一个表格控件,在使用中可以方便地添加各种类型的数据,并轻松展示和管理数据。其中,通过设置表头筛选功能,我们可以更快速地找到我们想要查找的内容。 表头筛选功能的实现方式是,在表头上右键点击,选择“行筛选”或“列筛选”功能,然后弹出一个可输入的输入框,用户可以输入关键字或选取下拉列表中的文本,然后按下确定,筛选出满足条件的行或列。 要实现表头筛选功能,需要调用QTableWidget的setSortingEnabled(true)函数,此外还需要使用QHeaderView来设置表头,具体如下: ```cpp QTableView *tableView = new QTableView(this); QStandardItemModel *model = new QStandardItemModel(); tableView->setModel(model); //设置表头 QHeaderView *headerView = tableView->horizontalHeader(); headerView->setDefaultAlignment(Qt::AlignHCenter); //表头文本居中对齐 headerView->setStretchLastSection(true); //最后一列自适应宽度 headerView->setSectionResizeMode(QHeaderView::ResizeToContents); //列宽自适应内容 //支持表头筛选 headerView->setSectionsClickable(true); headerView->setContextMenuPolicy(Qt::CustomContextMenu); connect(headerView, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showHeaderMenu(const QPoint&))); //使用信号槽触发表头右键菜单事件 tableView->setSortingEnabled(true); //使能排序功能 ``` 以上为表头设置方法的一般步骤,根据实际的需求和场景,也可以做出适当的调整。在实现了表头的基本功能后,我们可以通过响应菜单事件来实现筛选功能的思路,如下所示: ```cpp void showHeaderMenu(const QPoint& pos) { QHeaderView *header = qobject_cast<QHeaderView *>(sender()); QMenu *menu = new QMenu(header); //创建菜单 QAction *action = menu->addAction(tr("筛选")); connect(action, &QAction::triggered, [&](){ int index = header->logicalIndexAt(pos); QMenu *pMenu = new QMenu(this); QAction *pFindByLetter = pMenu->addAction(tr("按首字母筛选")); connect(pFindByLetter, &QAction::triggered, [&]() { QString letter = pFindByLetter->text().split(" ")[1]; QRegExp regExp(QString("^[%1].*").arg(letter), Qt::CaseInsensitive, QRegExp::RegExp2); tableView->setSortingEnabled(false); //根据输入文本对表格元素进行排序 bool findResult = false; for(int i = 0; i < model->rowCount(); ++i) { bool rowMatch = false; for(int j = 0; j < model->columnCount(); ++j) { QModelIndex index = model->index(i, j); QStandardItem *item = model->itemFromIndex(index); if(item->text().contains(regExp)) { //如果符合条件,则设置标记 rowMatch = true; break; } } //如果还有符合条件的行,则显示 if(rowMatch == true) { tableView->showRow(i); findResult = true; } else { //如果不符合条件,则不显示 tableView->setRowHidden(i, true); } } }); pMenu->popup(header->mapToGlobal(pos)); }); menu->popup(header->mapToGlobal(pos)); } ``` 以上即为QTableWidget的表头筛选功能的基本实现思路,当然,遇到实际需求时,也可以根据业务方向和特殊需求进行适当的修改。 ### 回答2: Qt QTableWidget 是一个非常强大的表格控件,可以方便地显示和管理大量的数据。在实际的开发中,我们常常会遇到需要对表格的某些列进行筛选的需求。这时候,QTableWidget 提供了非常方便的表头筛选功能。 表头筛选指的是在表格的表头上添加筛选器,可以方便地对该列的数据进行筛选。使用 QTableWidget 实现表头筛选功能的步骤如下: 1.创建 QTableWidget 对象,并设置表格的行数和列数。 2.设置表头的每一列的标题,可以使用 setHorizontalHeaderLabels() 函数进行设置。 3.为每一列的表头添加筛选器,可以使用 setFiltersEnabled() 函数进行设置。该函数接受一个布尔值参数,表示是否启用该列的筛选器。 4.设置表格的数据,并将数据填充至表格中。 5.可以在表格的某一列的表头上看到一个筛选器图标,单击该图标即可打开该列的筛选器,并对该列的数据进行筛选。 6.可以使用 tabKeyPressed() 信号和returnKeyPressed() 信号来响应用户在筛选器中输入的文字,使用 setItemDelegate() 函数来实现自定义的筛选器代理。 在实现表头筛选功能的过程中,需要注意设置表格的默认大小及设置表头每一列的宽度,以便让用户更方便地操作。此外,还需要对用户在筛选器中输入的文字进行校验,避免出现误操作的情况。 总之,Qt QTableWidget 的表头筛选功能为用户提供了更方便的数据筛选方式,使得大量数据的管理和查看更加简便高效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪隐龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值