QT 设置QTableWidget 表头颜色

问题描述:

项目中用到QTableWidget 表格,想设置表格的表头颜色为蓝色,各行的颜色交替显示。奈何谷歌良久,都无法设置成功。其实最后发现,设置不成功的原因主要有两个方面:

  • 其一,他人博文中提供的方法本来有误;
  • 其二,因为设置表头颜色的代码是没有代码提示的,自己照着写的时候敲错了代码。

解决办法:

直接上代码:

 //记录六个字符串到字符串列表
    QStringList  listStudents;
    //添加六个字符串到字符串列表
    listStudents << tr("姓名") << tr("电话") << tr("地址") << tr("年龄") << tr("性别") << tr("班级");
    //设置水平表头
    ui->tableWidgetStudents->setHorizontalHeaderLabels(listHeaders);
    //设置表头颜色
    ui->tableWidgetStudents->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}");
   //设置相邻行颜色交替显示
    ui->tableWidgetStudents->setAlternatingRowColors(true);
    //垂直表头不显示
    ui->tableWidgetStudents->verticalHeader()->setVisible(false);
  1. 设置水平表头时候,可以用一个QStringList 数据结构。这样设置表头比利用循环直接对单个表头进行设置省力很多。
  2. 写表头颜色设置的具体代码时QT Creater 没有提供代码提示功能,所以一定要注意拼写和标点符号正确。
### 回答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表头筛选功能为用户提供了更方便的数据筛选方式,使得大量数据的管理和查看更加简便高效。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值