QTableWidget控件使用总结

QTableWidget介绍

QTbaleWidget是QT对话框设计中常用的显示数据表格的控件。

学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研究人一样一样的),因为QTableWidget继承于类QTableView。
两者主要区别是QTableView可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型。
QTableWidget单元格数据是QTableWidgetItem对象来实现的(即就是不需要数据源,单元格内的信息需要逐个填充即可)。
这主要由于QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。
使用QTableWidget就离不开QTableWidgetItem。

QTableWidgetItem用来表示表格中的其中一个单元格,整个表格都需要用逐个单元格对象QTableWidgetItem构建起来。

QTableWidget使用总结

(1)禁止编辑表格

在默认情况下,表格里的字符是可以更改的。

 比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:

[cpp] view plain copy print?

  1. ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);  
ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

(2)设置表格为选择整行

[cpp] view plain copy print?

  1. ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows);   
ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows); 

(3)设置单个选中和多个选中

 单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。

[cpp] view plain copy print?

  1. ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);   
ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection); 

(4)表格表头的显示与隐藏

 对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:

[cpp] view plain copy print?

  1. ui.qtablewidget->verticalHeader()->setVisible(true);    
  2. ui.qtablewidget->horizontalHeader()->setVisible(false);  
ui.qtablewidget->verticalHeader()->setVisible(true);
ui.qtablewidget->horizontalHeader()->setVisible(false);

(5)设置具体单元格中字体的对齐方式

[cpp] view plain copy print?

  1. ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);  
ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);

(6)设置具体单元格中字体格式

[cpp] view plain copy print?

  1. ui.qtablewidget->item(1, 0)->setBackgroundColor(QColor(0,60,10));     
  2. ui.qtablewidget->item(1, 0)->setTextColor(QColor(200,111,100));   
  3. ui.qtablewidget->item(1, 0)->setFont(QFont("Helvetica"));   
ui.qtablewidget->item(1, 0)->setBackgroundColor(QColor(0,60,10));
ui.qtablewidget->item(1, 0)->setTextColor(QColor(200,111,100));
ui.qtablewidget->item(1, 0)->setFont(QFont("Helvetica")); 

(7)设置具体单元格的值

[cpp] view plain copy print?

  1. ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));  
ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));

(8)把QTableWidgetItem对象内容转换为QString

[cpp] view plain copy print?

  1. QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();  
QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();

(9)具体单元格中添加控件

[cpp] view plain copy print?

  1. QComboBox *comBox = new QComboBox();   
  2. comBox->addItem("F");   
  3. comBox->addItem("M");   
  4. ui.qtablewidget->setCellWidget(0,3,comBox);  
QComboBox *comBox = new QComboBox();
comBox->addItem("F");
comBox->addItem("M");
ui.qtablewidget->setCellWidget(0,3,comBox);

(10)合并单元格

[cpp] view plain copy print?

  1.  //合并单元格的效果  
  2. ui.qtablewidget->setSpan(2, 2, 3, 2);  
  3. //第一个参数:要改变的单元格行数  
  4. //第二个参数:要改变的单元格列数  
  5. //第三个参数:需要合并的行数  
  6. 6 //第四个参数:需要合并的列数  
 //合并单元格的效果
ui.qtablewidget->setSpan(2, 2, 3, 2);
//第一个参数:要改变的单元格行数
//第二个参数:要改变的单元格列数
//第三个参数:需要合并的行数
6 //第四个参数:需要合并的列数

(11)具体单元格中插入图片

[cpp] view plain copy print?

  1. ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));  
ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));

(12)设置显示网格

[cpp] view plain copy print?

  1. ui.qtablewidget->setShowGrid(true);//显示表格线  
ui.qtablewidget->setShowGrid(true);//显示表格线

(13)设置滚动条

[cpp] view plain copy print?

  1. ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条  
ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条

(14)设置列标签

[cpp] view plain copy print?

  1. //初始化界面  
  2. QStringList  HStrList;  
  3. HStrList.push_back(QString("name"));  
  4. HStrList.push_back(QString("id"));  
  5. HStrList.push_back(QString("age"));  
  6. HStrList.push_back(QString("sex"));  
  7. HStrList.push_back(QString("department"));  
  8.     
  9. //设置行列数(只有列存在的前提下,才可以设置列标签)  
  10. int HlableCnt = HStrList.count();  
  11. ui.qtablewidget->setRowCount(10);  
  12. ui.qtablewidget->setColumnCount(HlableCnt);  
  13.   
  14. //设置列标签  
  15. ui.qtablewidget->setHorizontalHeaderLabels(HStrList);  
//初始化界面
QStringList  HStrList;
HStrList.push_back(QString("name"));
HStrList.push_back(QString("id"));
HStrList.push_back(QString("age"));
HStrList.push_back(QString("sex"));
HStrList.push_back(QString("department"));

//设置行列数(只有列存在的前提下,才可以设置列标签)
int HlableCnt = HStrList.count();
ui.qtablewidget->setRowCount(10);
ui.qtablewidget->setColumnCount(HlableCnt);

//设置列标签
ui.qtablewidget->setHorizontalHeaderLabels(HStrList);

(15)设置行和列的大小设为与内容相匹配

[cpp] view plain copy print?

  1. ui.qtablewidget->resizeColumnsToContents();    
  2. ui.qtablewidget->resizeRowsToContents();    
ui.qtablewidget->resizeColumnsToContents();
ui.qtablewidget->resizeRowsToContents();  

(16)设置字体

[cpp] view plain copy print?

  1. ui.qtablewidget->setFont(font);   //设置字体  
ui.qtablewidget->setFont(font);   //设置字体

(17)获取某一单元格的内容

[cpp] view plain copy print?

  1. <p>QString strText = ui.qtablewidget->item(0, 0)->text();</p>  

QString strText = ui.qtablewidget->item(0, 0)->text();

(18)清除单元格测内容

[cpp] view plain copy print?

  1. ui.tablewidget->clearContents( );   // 清除表项  
ui.tablewidget->clearContents( );   // 清除表项

(19)删除整个列表

[cpp] view plain copy print?

  1. while(ui.tablewidget->rowCount( ) > 0)  
  2. {  
  3.     ui.tablewidget->removeRow(0);    // 删除第0行  
  4. }  
    while(ui.tablewidget->rowCount( ) > 0)
    {
        ui.tablewidget->removeRow(0);    // 删除第0行
    }

(20)获取选定的行

[cpp] view plain copy print?

  1. // QTableWidget选中所有单元格及取消选中所有单元格  
  2. //    ui->allowSelectKeyTableWidget->selectAll();  
  3. //    ui->allowSelectKeyTableWidget->setFocus();  
  4.     introwCount=ui->TableWidget->rowCount();  
  5.     qDebug()<<"rowcount"<<rowCount;  
  6.     intcolCount=ui->TableWidget->columnCount();  
  7.     qDebug()<<"colcount"<<colCount;  
  8.     QTableWidgetSelectionRangerange(0,0,rowCount-1,colCount-1);  
  9.     ui->TableWidget->setRangeSelected(range,true);//false不选中  
  10.     ui->TableWidget->setFocus();  
// QTableWidget选中所有单元格及取消选中所有单元格
//    ui->allowSelectKeyTableWidget->selectAll();
//    ui->allowSelectKeyTableWidget->setFocus();
    introwCount=ui->TableWidget->rowCount();
    qDebug()<<"rowcount"<<rowCount;
    intcolCount=ui->TableWidget->columnCount();
    qDebug()<<"colcount"<<colCount;
    QTableWidgetSelectionRangerange(0,0,rowCount-1,colCount-1);
    ui->TableWidget->setRangeSelected(range,true);//false不选中
    ui->TableWidget->setFocus();

方法1

[cpp] view plain copy print?

  1. QList<QTableWidgetItem*>items=ui->TableWidget->selectedItems();  
  2. intcount=items.count();  
  3. for(inti=0;i<count;i++)  
  4.     {  
  5.        introw=ui->TableWidget->row(items.at(i));//获取选中的行  
  6.        QTableWidgetItem*item=items.at(i);  
  7.        QStringname=item->text();//获取内容  
  8.     }  
QList<QTableWidgetItem*>items=ui->TableWidget->selectedItems();
intcount=items.count();
for(inti=0;i<count;i++)
    {
       introw=ui->TableWidget->row(items.at(i));//获取选中的行
       QTableWidgetItem*item=items.at(i);
       QStringname=item->text();//获取内容
    }

方法2

[cpp] view plain copy print?

  1. QList<QTableWidgetSelectionRange>ranges=ui->TableWidget->selectedRanges();  
  2.     intcount=ranges.count();  
  3.     for(inti=0;i<count;i++)  
  4.     {  
  5.        inttopRow=ranges.at(i).topRow();  
  6.        intbottomRow=ranges.at(i).bottomRow();  
  7.        for(intj=topRow;j<=bottomRow;j++)  
  8.        {  
  9.           qDebug()<<"selectRow"<<j;  
  10.         }  
  11. }  

转载:http://blog.csdn.net/gatieme/article/details/17991269

时间: 2024-12-21 21:20:48

QTableWidget控件使用总结的相关文章

qt-Qt里的QTableWidget控件里绘图问题。

问题描述 Qt里的QTableWidget控件里绘图问题. QTableWidget里面有很多单元格,我想画条线把任意2个单元格连接起来.画矩形,根据 4个单元格比如A(2,3),B(5,3),C(2,10),D(5,10)括号里面数字为对应的行列值,画出一个矩形,并填充颜色. 解决方案 关于QTableWidget里的滚动条问题 解决方案二: http://blog.csdn.net/jingzhesiye/article/details/7870543 解决方案三: http://blog.

C++ Builder中如何保持控件的位置及大小

C++ Builder/Delphi是Inprise(原Borland)公司广受欢迎的可视化C++/Pascal开发工具,利用它可极大地加快应用程序的开发速度.但是,也正因为其是可视化编程工具,将控件拖放到Form后,控件的位置就固定死了.随着Form的大小或屏幕分辨率的改变,控件和Form本身的位置往往变得非常混乱.本文将介绍一些正确定位控件及Form的方法. 利用OnResize事件改变控件位置及大小 C++ Builder/Delphi中的Form控件有一个OnResize事件,Form的

javaweb-网页调用ocx控件打开或创建注册表的权限问题

问题描述 网页调用ocx控件打开或创建注册表的权限问题 在某几个win7 64位笔记本上, 通过服务器页面调用ocx读取注册表会提示无权限的现象,但使用本地html文件调用没问题, 不知是何原因,求大侠给点提示 解决方案 又试了一下,使用世界之窗浏览器可以正常使用了.但不明白为何? 解决方案二: ie本地file协议浏览(intranet)和http访问(internet)使用的是不同的安全设置,你按照本地的intranet安全配置internet安全设置 不过你这种需求没什么意义,只能针对特殊

web-关于不用控件绑定数据的问题

问题描述 关于不用控件绑定数据的问题 各位大神 我是一名在校计算机系大学生 想请教一下现在企业里做web是不是不用vs里面自带的控件 如果不用控件 这个gridview绑定数据库的数据应该如何实现 能说详细点或者给个链接教程吗 先不说 mvc架构 我想先用代码去实现 再去学mvc 谢谢 求大神指点 解决方案 很难的 怎么有点看不到是什么啊 解决方案二: 对WEB来说.其实很简单.WEB中表格的本质是 <table><tr><td></td></tr&g

控件-mscomm串口波形绘制范例,求大神解析这三个函数,急急急,绘制波形图的原理是什么,拜托了

问题描述 mscomm串口波形绘制范例,求大神解析这三个函数,急急急,绘制波形图的原理是什么,拜托了 //串口void CPort_testDlg::OnComm() { //if(stop)return; VARIANT m_input1; COleSafeArray m_input2; long lengthi; BYTE data[600]; CString str; int ai=0bi=0ci=0di=0; int sum=0; if(m_Comm.GetCommEvent()==2)

Javascript 遍历页面text控件详解

 本篇文章主要是对Javascript遍历页面text控件进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 以下函数实现了列出页面中所有html控件类型为text的控件ID    代码如下:         function Texts()          {               //var els= document.getElementsByTagName("*");   //els得到页面所有控件               var els= document.

充分利用 .NET 框架的 PropertyGrid 控件(微软)之二

控件|微软 创建 PropertyGrid 控件要使用 Visual Studio .NET 创建 PropertyGrid 控件,需要将该控件添加到工具箱中,因为默认情况下并不包含该控件.在 Tools(工具)菜单中,选择 Customize Toolbox(自定义工具箱).在对话框中选择 Framework Components(框架组件)选项卡,然后选择 PropertyGrid. 如果您从命令行编译代码,请使用 /reference 选项并指定 System.Windows.Forms.

如何用c#来制作一个activeX控件或类似的东西

active|activex|控件 Q cat: 操作系统: 2000/xp 编程工具: vs.net 2003 /c# 问题: 我想制作一个activeX控件或类似的东西,有用户界面的,然后想在ie中使用,通过Vbscript与其进行数据交换,在以前好像可以使用vb就能做到,但是现在是vs.net 2003企业版,好像已经进化了,activeX成了老的技术,那vs.net如何解决这种类似的问题?如果要使用c#来编程的话,具体如何操作?还要有界面. A回答: 在C#中和ActiveX控件对应的是

手机端产品交互设计:手机端产品翻页控件的设计

文章描述:对手机端产品翻页控件做的一些粗浅整理归纳.具体到设计应用中,我们需要根据产品性质.用户操作使用情景.手机和操作平台本身的特性等具体情况来考虑设计使用翻页控件. 翻页控件在很多手机端产品中属于容易被忽视但又不可或缺的一部分,今天就手机端产品翻页控件的分类和使用谈谈自己一些粗浅的看法. 在手机端产品中,翻页控件的展示形式五花八门:以所展示信息内容的性质和用户的使用情境作为维度划分的话,大致可以分为这样几个类型: A:时效类翻页控件 产品所展示的信息在"时效性""关联度&