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