1.定义,是干什么用的
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
2.两者关系
3使用总结 其中部分内容转自http://blog.csdn.net/mingxia_sui/article/details/7681863 

1.QTableWidget不能在mainwindow中随主窗口的大小变化?

解决:在表格外部添加布局。

代码:tableWidget = new QTableWidget;

tableWidget ->setObjectName(QString::fromUtf8("tableWidget"));

QVBoxLayout *verticalLayout;

verticalLayout->addWidget(tableWidget );

除代码外也可在UI中直接添加布局,然后将tablewidget放入布局中,然后右键布局-在窗体中部局,再次右键部局-水平布局,以下的大多数内容都可直接在布局管理器中直接设置。

2.将表格变为禁止编辑:

tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

(参数含义:QAbstractItemView.NoEditTriggers--不能对表格内容进行修改

QAbstractItemView.CurrentChanged--任何时候都能对单元格修改

QAbstractItemView.DoubleClicked--双击单元格

QAbstractItemView.SelectedClicked--单击已选中的内容

QAbstractItemView.EditKeyPressed--

QAbstractItemView.AnyKeyPressed--按下任意键就能修改

QAbstractItemView.AllEditTriggers--以上条件全包括)

3.设置表格为整行选择

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式

(参数含义:AbstractItemView.SelectItems--选中单个单元格

QAbstractItemView.SelectRows--选中一行

QAbstractItemView.SelectColumns--选中一列)

4.单个选中和多个选中的设置:

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  //设置为可以选中多个目标

(参数含义:QAbstractItemView.NoSelection--不能选择

QAbstractItemView.SingleSelection--选中单个目标

QAbstractItemView.MultiSelection--选中多个目标

QAbstractItemView.ExtendedSelection/QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选)

5.表格表头的显示与隐藏

对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:

tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头

tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头

注意:需要 #include <QHeaderView>

6.对表头文字的字体、颜色进行设置

QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象

columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体

columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色

columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色

注意:需要 #include <QHeaderView>

7.在单元格里加入控件:

QComboBox *comBox = new QComboBox();

comBox->addItem("Y");

comBox->addItem("N");

tableWidget->setCellWidget(0,2,comBox);

8.单元格中添加图片:

tableWidget->setItem(row, 0, new QTableWidgetItem(QIcon(":/new/images/kingdemo.ico"),tr("")));

9设置单元格字体颜色、背景颜色和字体字符:

QTableWidgetItem *item = new QTableWidgetItem("Apple");

item->setBackgroundColor(QColor(0,60,10));

item->setTextColor(QColor(200,111,100));

item->setFont(QFont("Helvetica"));

tableWidget->setItem(0,3,item);

另:如果需要对所有的单元格都使用这种字体,则可以使用  tableWidget->setFont(QFont("Helvetica"));

10.设置单元格内文字的对齐方式

水平对齐方式有:

Constant Value Description

Qt.AlignLeft 0x0001 Aligns with the left edge.

Qt.AlignRight 0x0002 Aligns with the right edge.

Qt.AlignHCenter 0x0004 Centers horizontally in the available space.

Qt.AlignJustify 0x0008 Justifies the text in the available space.

垂直对齐方式:

Constant Value Description

Qt.AlignTop 0x0020 Aligns with the top.

Qt.AlignBottom 0x0040 Aligns with the bottom.

Qt.AlignVCenter 0x0080 Centers vertically in the available space.

如果两种都要设置,只要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可

11.合并单元格:

tableWidget->setSpan(0, 0, 3, 1)  # 其参数为: 要改变单元格的1行数、2列数,要合并的3行数、4列数

12.设置单元格的大小

首先,可以指定某个行或者列的大小

tableWidget->setColumnWidth(3,200);

tableWidget->setRowHeight(3,60);

还可以将行和列的大小设为与内容相匹配

tableWidget->resizeColumnsToContents();

tableWidget->resizeRowsToContents();

13.获得单击单元格的内容

通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));//双击

connect(tableWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));//单击

//将itemClicked信号与函数getItem绑定

14.QTableWidget要调整表格行宽主要涉及以下函数

tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);//使列完全填充并平分 但后期不可改变大小

tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);//行自适应宽度

tableWidget->resizeColumnsToContents(); //根据内容调整列宽

tableWidget->resizeColumnToContents(int col);//根据内容自动调整给定列宽

tableWidget->horizontalHeader()->setResizeMode//把给定列设置为给定模式

主要模式有Stretch和Fixed

15.添加表头内容:

方法一:

QStringList header;

header<<""<<tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5");

方法二:

tableWidget->setHorizontalHeaderLabels(QStringList() << tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5"));

16.清除:

tableWidget->clear();//清除所有可见数据(包括表头),行还在

tableWidget->clearContents();//只清除表中数据,不清除表头内容

tableWidget->setRowCount(0);//连行也清除掉

17.保存到文件:

//自由选择路径

QString dir = QFileDialog::getSaveFileName(this,

tr("Open Config"),

"frame.html",//默认保存文件名

tr("Config Files (*.html)"));//文件类型限制

//文件路径及名称

QFile outFile(dir);

//看能否打开

if(!outFile.open(QIODevice::WriteOnly | QIODevice::Append))

{

QMessageBox::warning(NULL,QStringLiteral("警告"),QStringLiteral("保存文件失败"));

return ;

}

QTextStream ts(&outFile);

QString strText;

//遍历tableWidget 将内容存放到 strText

ts <<strText <<endl;

18.添加右键

tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);

connect(tableWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showtablerightMenu(QPoint)));

附:.一些零碎的知识点代码:

int row = tableWidget->rowCount();//获取表格中当前总行数

tableWidget->setRowCount(row+1);//添加一行

tableWidget->removeRow(row);//清除已有的行列

Int row1 = tableWidget->currentItem()->row();//当前选中行

bool focus = tableWidget->isItemSelected(tableWidget->currentItem());//判断是否选中一行

QString proName = tableWidget->item(row, col)->text();//获取某一格内容

setShowGrid(true);//显示表格线

verticalHeader()->setVisible(false);//隐藏左边垂直

QHeaderView *headerView = horizontalHeader();

headerView->setMovable(false);//去除表头的移动

headerView->resizeSection(0,284);//设置第一列宽

headerView->resizeSection(1,127);//设置第二列宽

headerView->setResizeMode(QHeaderView::Fixed);//列表不能移动

headerView->setClickable(false);//不响应鼠标单击

setEditTriggers(QTableWidget::NoEditTriggers);//不能编辑

setSelectionBehavior(QTableWidget::SelectRows);//一次选中一行

setSelectionMode(QAbstractItemView::SingleSelection);//只能单选

/*QScrollBar *scrollBar = horizontalScrollBar();

scrollBar->hide();*/

setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条

setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动

setAutoScroll(false);//去掉自动滚动

转载于:https://www.cnblogs.com/etwd/p/4549389.html

QTableWidget相关推荐

  1. Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

    目录 1.QTableView类 2.QListView类 3.QListWidet类 4.QTableWidget类 5.QTreeWidget和QTreeWidgetltem类 表格与树解决的问题 ...

  2. Qt中文手册 之 QTableWidget

    简介: QTableWidget是基于QTableView的一个默认的视图模型:它用于显示一个标准的表格.表格中每一个项通过QTableWidgetItem来实现. 头文件:#include < ...

  3. QTableView和QTableWidget翻页功能实现

    主要使用QTableView和QTableWidget中的三个函数实现 QTableView::verticalScrollBar()->setSliderPosition():  //设置当前 ...

  4. python tablewidget综合实例_python – 仅通过单击行标题选择QTableWidget行

    类Qt.ItemFlag 此枚举描述了项目的属性.请注意,需要为可检查项目提供一组合适的标志和初始状态,指示是否检查该项目.这是为模型/视图组件自动处理的,但需要为QTableWidgetItem的实 ...

  5. qt与mysql的增删改查_Qt数据库与QTableWidget结合的增删改查

    点击上方蓝字可直接关注!方便下次阅读.如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~ 大家好!再过一段时间是2020年的农历新年,预祝大家新年安康! 之前和大家简单介绍过Qt Sqlite数据 ...

  6. QT QTableWidget 用法总结

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

  7. python qtablewedgit_PyQt5-高级控件使用(QTableWidget)

    1 #QTableWidget 控件使用 2 from PyQt5.QtWidgets importQComboBox,QTableView,QAbstractItemView,QHeaderView ...

  8. qt qtableview 刷新列表_qt qtablewidget 刷新

    QTableWidget单击.双击表头进行排序_互联网_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 QTableWidget单击.双击表头进行排序_互联网_IT/计算机_专业... ...

  9. QTableWidget控件总结

    1,设置QTableWidget滚动条宽度. myTableWidget->verticalScrollBar()->setStyleSheet("QScrollBar:vert ...

  10. PyQt的QTableWidget的全面总结与归纳

    这几天用QTableWidget用得很多,查了很多资料,发现大多数都不是很全,有时候查资料查得很辛苦:另一方面,以防以后自己忘了这些知识,所以在这里就把我所接触到的,所看到的都归纳在这里. 首先QTa ...

最新文章

  1. windows10+虚拟机Ubuntu17.10+Anaconda+Python2
  2. 在Docker里使用(支持镜像继承的)supervisor管理进程(转)
  3. 复现经典:《统计学习方法》第 4 章 朴素贝叶斯
  4. 一个例子带你搞懂python作用域中的global、nonlocal和local
  5. python时间模块提取时间_【转载】python自动提取文本中的时间(包含中文日期)...
  6. ASP经典分页类(改良后的分页类主要是显示属性)
  7. OpenDDS 安全配置
  8. AWS SQS, SWF and SNS
  9. 【JSP】EL表达式和JSTL
  10. Mysql间隔时间查询数据
  11. 小米神隐模式破解(反系统息屏后网络中断)
  12. ei指什么_今天说一下EI是什么
  13. c++学习书籍推荐《C++程序设计语言(特别版)》下载
  14. 阿里移动11.11 | Weex 在双十一会场的大规模应用--备用
  15. ISCSLP 2022 | AccentSpeech—从众包数据中学习口音来构建目标说话人的口音语音合成系统
  16. yii通过uc实现同步登陆
  17. java用swing日历标记节日,java基于swing实现日历
  18. 面向对象(4)封装与继承
  19. 在html中 常见的块级元素有哪些,常见的css块级元素有哪些
  20. 构建 django项目

热门文章

  1. 由于本机的限制,该操作已被取消。请与系统管理员联系
  2. Sql*plus 联机文档学习
  3. Spring后端接收表单方式上传的文件和数据
  4. 服务器虚拟机的关键特性,VMware Workstation的几大关键特性
  5. c语言写的程序如何移植,完全由C语言编写,高度可移植,超级牛逼的软件定时器!...
  6. Redis BigKey
  7. Spring Security 之多AuthenticationProvider认证模式实现
  8. 平安智慧企业大规模离职_中星微获“2020人工智能芯片技术创新企业奖”
  9. Windows搭建SVN实现访问远程SVN库
  10. bigdecimal js 判断等于0_Js BigDecimal实现精确加减乘除运算的方法