qtbalewidget是qt对话框设计中常用的显示数据表格的控件。
学习qtablewidget就要首先看看qtableview控件(控件也是有”家世“的!就像研究人一样一样的),因为qtablewidget继承于类qtableview。
两者主要区别是qtableview可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setmodel来绑定数据源),而qtablewidget则只能使用标准的数据模型。
qtablewidget单元格数据是qtablewidgetitem对象来实现的(即就是不需要数据源,单元格内的信息需要逐个填充即可)。
这主要由于qtableview类中有setmodel成员函数,而到了qtablewidget类中,该成员函数变成了私有。
使用qtablewidget就离不开qtablewidgetitem。
qtablewidgetitem用来表示表格中的其中一个单元格,整个表格都需要用逐个单元格对象qtablewidgetitem构建起来。
在默认情况下,表格里的字符是可以更改的。
比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:
ui.qtablewidget->setedittriggers(qabstractitemview::noedittriggers);
ui.qtablewidget->setselectionbehavior(qabstractitemview::selectrows);
单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。
ui.qtablewidget->setselectionmode(qabstractitemview::extendedselection);
对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:
ui.qtablewidget->verticalheader()->setvisible(true);
ui.qtablewidget->horizontalheader()->setvisible(false);
ui.qtablewidget->item(0, 0)->settextalignment(qt::alignhcenter);
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"));
ui.qtablewidget->setitem(1, 0, new qtablewidgetitem(str));
qstring str =ui.qtablewidget->item(0, 0)->data(qt::displayrole).tostring();
qcombobox *combox = new qcombobox();
combox->additem("f");
combox->additem("m");
ui.qtablewidget->setcellwidget(0,3,combox);
//合并单元格的效果
ui.qtablewidget->setspan(2, 2, 3, 2);
//第一个参数:要改变的单元格行数
//第二个参数:要改变的单元格列数
//第三个参数:需要合并的行数
6 //第四个参数:需要合并的列数
ui.qtablewidget->setitem(3, 2, new qtablewidgetitem(qicon("images/music.png"), "music"));
ui.qtablewidget->setshowgrid(true);//显示表格线
ui.qtablewidget->sethorizontalscrollbarpolicy(qt::scrollbaralwaysoff);//去掉水平滚动条
//初始化界面
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);
ui.qtablewidget->resizecolumnstocontents();
ui.qtablewidget->resizerowstocontents();
ui.qtablewidget->setfont(font); //设置字体
<p>qstring strtext = ui.qtablewidget->item(0, 0)->text();</p>
qstring strtext = ui.qtablewidget->item(0, 0)->text();
ui.tablewidget->clearcontents( ); // 清除表项
while(ui.tablewidget->rowcount( ) > 0)
{
ui.tablewidget->removerow(0); // 删除第0行
}
// 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
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
qlist<qtablewidgetselectionrange>ranges=ui->tablewidget->selectedranges();
intcount=ranges.count();
for(inti=0;i<count;i++)
inttoprow=ranges.at(i).toprow();
intbottomrow=ranges.at(i).bottomrow();
for(intj=toprow;j<=bottomrow;j++)
{
qdebug()<<"selectrow"<<j;
}
}
转载:http://blog.csdn.net/gatieme/article/details/17991269