1.QTableWidget继承自QTableView。

QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。​ QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

QTableWidget和QTableView区别见:https://blog.csdn.net/zyc_csdn/article/details/78830542

    tbl_task_list=new QTableWidget(this);
tbl_task_list->setMinimumHeight ();
tbl_task_list->setMaximumWidth ();
tbl_task_list->setColumnCount();
tbl_task_list->verticalHeader()->setVisible(false);
tbl_task_list->horizontalHeader()->setVisible(true);
tbl_task_list->setShowGrid(true); //设置显示格子线
tbl_task_list->setEditTriggers(QAbstractItemView::NoEditTriggers);
tbl_task_list->setSelectionBehavior(QAbstractItemView::SelectRows);
tbl_task_list->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); QStringList header_task;
header_task<<"任务名称"<<"小车"<<"任务状态"<<"任务产生时间"<<"任务相应时间";
tbl_task_list->setHorizontalHeaderLabels(header_task);
tbl_task_list->setObjectName("tbl_task_list"); /*
//添加一行数据
rows=tbl_task_list->rowCount ()+1;
tbl_task_list->setRowCount (rows);
addTaskItem("111",rows-1,0);
addTaskItem("222",rows-1,1);
addTaskItem("333",rows-1,2);
addTaskItem("444",rows-1,3);
addTaskItem("555",rows-1,4); //添加一行数据
rows=tbl_task_list->rowCount ()+1;
tbl_task_list->setRowCount (rows);
addTaskItem("aaa",rows-1,0);
addTaskItem("bbb",rows-1,1);
addTaskItem("cccc",rows-1,2);
addTaskItem("dddd",rows-1,3);
addTaskItem("eeee",rows-1,4);
void Widget::addTaskItem(QString data,int row ,int col)
{
QTableWidgetItem *item = new QTableWidgetItem(data);
QFont font;
font.setFamily ("Verdana");
font.setBold (false);
font.setPixelSize ();
item->setFont(font);
item->setTextAlignment (Qt::AlignCenter);
tbl_task_list->setItem(row,col,item);
}

2. 隐藏列表头和行表头,#include <QHeaderView>

  tbMotorWidget->verticalHeader()->setVisible(false); //隐藏列表头
tbMotorWidget->horizontalHeader()->setVisible(false); //隐藏行表头

3. 设置表头的背景色

tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:#00BFFF;}");

4. 隐藏滚动条

twInfo->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
twInfo->setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOff);

5. 设置垂直头不可见,即左边序号不见

tableWidget->verticalHeader()->setVisible(true);//显示行序号1,2,3...

6. 每添加一条数据滚动条自动到底

tableWidget->scrollToBottom();

7. 文本居中显示

 QTableWidgetItem *item = new QTableWidgetItem(data);
QFont font;
font.setFamily ("Verdana");
font.setBold (false);
font.setPixelSize ();
item->setFont(font);
item->setTextAlignment (Qt::AlignCenter);
return item;

8. 指定表头字体

 QFont font;
font.setBold(true);
tableWidget->horizontalHeader()->setFont(font);

9. 设置表头的内容充满整个表格的宽度

tableWidget->horizontalHeader()->setStretchLastSection(true);

10. 选择行

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次一行
    tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、Ctrl+A都可以)

11.QTableWidget使用setCellWidget设置控件默认是塞满填充的,如果强制设置了控件的尺寸,则默认左上角开始放置,有时候这种情况很难看,需要居中显示,QTableWidget可以设置文本居中显示,但是不能设置控件居中显示。使用如下方法可以实现:

 if(tbDataWidget->rowCount()==)
{
tbDataWidget->setRowCount();
for(int i=;i<;i++)
{
addTableCheckItem(i); QPushButton *btnColor=new QPushButton(this);
btnColor->setMinimumSize(,);
btnColor->setMaximumSize(,);
setButtonColor(btnColor,getRandomColor());
QWidget *btnWidget = new QWidget;
QHBoxLayout *hLayout = new QHBoxLayout(this);
hLayout->setSpacing(0);
hLayout->setMargin(0);
hLayout->addWidget(btnColor);
btnWidget->setLayout(hLayout);
tbDataWidget->setCellWidget(i,,btnWidget);
connect(btnColor,&QPushButton::clicked,[=](){
slotColorButtonClicked(i);
}); } }
void OperationWidget::slotColorButtonClicked(int row)
{ QWidget *widget = (QWidget *)tbDataWidget->cellWidget(row, );
QPushButton *btn = (QPushButton *)widget->children().at();
QColor c = QColorDialog::getColor(Qt::blue); setButtonColor(btn,c);
}
void OperationWidget::setButtonColor(QPushButton *btn, QColor c)
{
btn->setStyleSheet("background-color:rgb("+QString::number(c.red())+","
+QString::number(c.green())+","
+QString::number(c.blue())+");");
}

12.点击单元格触发事件

connect(tbDataWidget,SIGNAL(cellClicked(int,int)),this,SLOT(slotTableItemSelected(int,int)));

void OperationWidget::slotTableItemSelected(int row, int col)
{ if(tbDataWidget->item(row,)->checkState()==Qt::Checked)
{
emit sigShowSelectedValue(true,tbDataWidget->item(row,)->text());
}
else
{
emit sigShowSelectedValue(false,tbDataWidget->item(row,)->text());
}
}

13. 清除

tableWidget->clear();//清除所有可见数据(包括表头),行还在
tableWidget->clearContents();//只清除表中数据,不清除表头内容
tableWidget->setRowCount(0);//连行也清除掉

14. 添加控件,获得控件触发的行

 QSlider *slider=new QSlider(this);
slider->setOrientation(Qt::Horizontal);
slider->setMinimum(1100);
slider->setMaximum(1900);
slider->setSingleStep(1); connect(slider, SIGNAL(valueChanged(int)), this, SLOT(slotSilderValueChange(int)));
tbMotorWidget->setCellWidget(i,3,slider);
void OperationWidget::slotSilderValueChange(int value)
{
QSlider *senderObj=qobject_cast<QSlider*>(sender());
if(senderObj == nullptr)
{
return;
}
QModelIndex idx =tbMotorWidget->indexAt(QPoint(senderObj->frameGeometry().x(),senderObj->frameGeometry().y()));
int row=idx.row();
qDebug()<<"row"<<row;
}

15. 某一列禁止编辑

QTableWidgetItem *item = new QTableWidgetItem(data);
if(!isIsEditable)
{
item->setFlags(item->flags() & (~Qt::ItemIsEditable));
}

QTableWidget的更多相关文章

  1. QTableWidget详解(样式、右键菜单、表头塌陷、多选等)

    在Qt的开发过程中,时常会用到表单(QTableWidget)这个控件,网上的资料不少,但是都是最基本的,有一些比较经常遇到的问题也说得不太清楚.所以,今天就在这里总结一下! 以下为个人模拟Windo ...

  2. QTableWidget行选中/删除/添加行

    1  均分各列 tableWidget->horizontalHeader()->setStretchLastSection(true); //就是这个地方 tableWidget-> ...

  3. QTableWidget控件总结<二>

    QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中的DataGrid.说到QTableWidget,就必须讲一下它跟QTabelView的区别了.QTableWidge ...

  4. QTableWidget控件总结<一>

    [1]QTableWidget简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. 学习QTableWidget就要首先看看QTableView控件(控件也是有"家世& ...

  5. QTableWidget控件总结

    [1]QTableWidget简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. 学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研 ...

  6. QTableWidget 使用及美化_QtableWidget_QtableView滚动条宽度及样式

      //创建及属性设置m_tableWidget = new QTableWidget(this);m_tableWidget->setRowCount(10);m_tableWidget-&g ...

  7. QTableWidget的美化

      FriendTable->setFrameShape(QFrame::NoFrame);  //设置边框 FriendTable->setHorizontalHeaderLabels( ...

  8. 【转载】pyqt QTableWidget的使用

    转载地址: http://blog.sina.com.cn/s/blog_9b78c91101019sgi.html QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中 ...

  9. QTableWidget实用技巧(转)

    http://blog.csdn.NET/mingxia_sui/article/details/7681863 在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和 ...

  10. 【2016-08-06】QTableWidget的一些用法总结

    1. QTableWidget的列宽如何自适应显示区域大小? QTableWidget的列头继承自QHeaderView,因此如果不使用固定列宽而需要Table中多列的列宽自适应显示区域大小的话, 可 ...

随机推荐

  1. HTTP.SYS远程执行代码漏洞分析 (MS15-034 )

    写在前言:   在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...

  2. 解析ArcGis拓扑——根据拓扑错误记录提取shp文件、导出Excel表格

    在ArcGis拓扑检查的流程——以面重叠检查为例中讲述了如何在ArcGis进行拓扑检查与修改. 在实际操作中,有时我们还需要将ArcGis拓扑检查的结果制作成报告或者提取错误信息反馈作业方. 本文仍然 ...

  3. 049、准备overlay网络实验环境(2019-03-14 周四)

    参考https://www.cnblogs.com/CloudMan6/p/7270551.html   为了支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于Vx ...

  4. 错误 1 未能找到类型或命名空间名称“DataPager”(是否缺少 using 指令或程序集引用?)

    鄙人在设计器SearchTab.xaml中添加了如下一个分页控件: <sdk:DataPager x:Name="dataPagerPrj" Grid.Row="3 ...

  5. docker 系列 - Java程序制作Docker Image推荐方案(转载)

    本文转自 https://segmentfault.com/a/1190000016449865  , 感谢作者! 本文的源代码在:https://github.com/chanjarste... 这 ...

  6. Postman 安装及使用入门教程 (谷歌浏览器插件版)

    postman 在 谷歌浏览器中插件版 http://www.cnblogs.com/mafly/p/postman.html Postman 4.1.2 下载地址: http://files.cnb ...

  7. Session 快速开始 通过session的attribute通信

    [web.xml] <session-config> <session-timeout>30</session-timeout> <cookie-config ...

  8. VS中ipch文件夹和sdf文件的处理方式

    ipch文件夹和sdf是VS产生的预编译头文件和智能提示信息,对编码没有影响,可存放在固定的位置,定期进行清理

  9. ELK平台搭建(上)

    一.目的 为指导在Centos6.8系统下搭建标准ELK平台的工作. 二.定义 Elasticsearch Logstash Kibana结合Redis协同工作. 三.适用范围 适用于运营维护组运维工 ...

  10. Spark Streaming连接Kafka的两种方式 direct 跟receiver 方式接收数据的区别

    Receiver是使用Kafka的高层次Consumer API来实现的. Receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming ...