QTableWidget的使用详细介绍和美工总结(转)

基本外观设置

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

FriendTable->setHorizontalHeaderLabels(HeadList);  设置表头

FriendTable->setSelectionMode(QAbstractItemView::SingleSelection);   设置选择的模式为单选择

FriendTable->setSelectionBehavior(QAbstractItemView::SelectRows);    设置选择行为时每次选择一行

FriendTable->setShowGrid(false);   设置不显示格子线

FriendTable->setFont(font);   设置字体

FriendTable->hideColumn(0);    //隐藏用户指定的某一列

 

设置表单背景或透明

QPalette pal = musicTable->palette();
pal.setBrush(this->backgroundRole(),QBrush(QPixmap("images/background.png")) );
    musicTable->setPalette( pal );

 

设置它的背景图片,也可以将QBrush初始化为QColor来设置背景颜色

QPalette pll = musicTable->palette();

pll.setBrush(QPalette::Base,QBrush(QColor(255,255,255,0)));

musicTable->setPalette(pll);  //和QTextEdit一样,都可以使用样式表QPalette来修改它的背景颜色和背景图片,这里我们把刷子设置为全透明的,就可以是透明的


在QTableWidget列表中添加图片的方法   
QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes"));
cubesHeaderItem->setIcon(QIcon(QPixmap("1.png")));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);
musicTable->setItem(1,1,cubesHeaderItem);   //在第一行第一列中显示图片

 

*******************表头的属性修改****************

musicTable->horizontalHeader()->resizeSection(0,150);  //修改表头第一列的宽度为150

musicTable->horizontalHeader()->setFixedHeight(25);  //修改表头合适的高度

musicTable->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color:lightblue;color: black;padding-left: 4px;border: 1px solid #6c6c6c;}");    //设置表头字体,颜色,模式

FriendTable->verticalHeader()->setStyleSheet("QHeaderView::section {  background-color:skyblue;color: black;padding-left: 4px;border: 1px solid #6c6c6c}");   //设置纵列的边框项的字体颜色模式等

注:QTableView的列头和行头使用其内含子控件QHeaderView体现的,故我们可以在 .qss 美工文件中如下写到:

[css] view plaincopy
 
  1. QTableWidget QHeaderView::section   
  2. {  
  3.     background-color:lightblue;  
  4.     colorblack;  
  5.     padding-left4px;  
  6.     border1px solid #6c6c6c  
  7. }  

上述用到CSS和QSS的语法 ,指定作用的对象为QTableWidget 的 QHeaderView子控件;

定义一个后缀名为.qss的文件,添加到资源文件中,然后通过如下代码使其生效:

[cpp] view plaincopy
 
  1. QFile beauty("beauty.qss");  
  2.    beauty.open(QFile::ReadOnly);  
  3.    qApp->setStyleSheet(beauty.readAll());  
  4.    beauty.close();  

 

[cpp] view plaincopy
 
  1. QFile beauty("beauty.qss");  
  2.    beauty.open(QFile::ReadOnly);  
  3.    qApp->setStyleSheet(beauty.readAll());  
  4.    beauty.close();  


本来想找找QT里有没有现成的API的,结果没有找到,只能自己写了。
实现也好实现,QTableWidgetItem里面有修改背景色的API,直接调用,然后用循环控制隔行换色即可。
实现代码:
void testtt::changeColor(QTableWidget *tablewidget){
for (int i = 0;i < tablewidget->rowCount();i++)
{
      if (i % 2 == 0)
      {
            for (int j = 0;j < tablewidget->columnCount();j++)
           {
                 QTableWidgetItem *item = tablewidget->item(i,j);
                 if (item)
                {
                     const QColor color = QColor(252,222,156);
                      item->setBackgroundColor(color);
                 }
           }
     }
}

 

 

 

 

使用

向表中插入一项

  QTableWidgetItem *num=new QTableWidgetItem(QTableWidgetItem::Type);
            num->setCheckState(Qt::Unchecked);   //加入复选框
            num->setIcon(QIcon("images/fetion.png"));  //加入ICon
            num->setText(InfoList.at(i).name);
            num->setFont(font);
            num->setTextColor(color);
            num->setFlags(num->flags() ^ Qt::ItemIsEditable);

            int currentRow=FriendTable->rowCount();  //插入到最后
            FriendTable->insertRow(currentRow);
            FriendTable->setItem(currentRow,0,num);  //插入该Item
            FriendTable->selectRow(0);   选择第一行

删除某一行 列

FriendTable->removeRow(row);

FriendTable->removeColumn (column );

 

信号

void cellActivated ( int row, int column )
void cellChanged ( int row, int column )
void cellClicked ( int row, int column )
void cellDoubleClicked ( int row, int column )
void cellEntered ( int row, int column )
void cellPressed ( int row, int column )
void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn )
void currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous )  改变Item了
void itemActivated ( QTableWidgetItem * item )
void itemChanged ( QTableWidgetItem * item )
void itemClicked ( QTableWidgetItem * item )
void itemDoubleClicked ( QTableWidgetItem * item )
void itemEntered ( QTableWidgetItem * item )
void itemPressed ( QTableWidgetItem * item )
void itemSelectionChanged ()

上述大部分代码转自:http://blog.csdn.net/xie376450483/article/details/5816950# 感谢~~~

自己使用QTableWidget时的一些用法的总结:

1、关于QTableWidget的头单元的宽度,将第一列设置为hint默认宽度

[cpp] view plaincopy
 
  1. ui->twOrderDish->resizeColumnToContents(0);  

2、将QTableWidget的头单元最后补全:

[cpp] view plaincopy
 
  1. ui->twOrderDish->horizontalHeader()->setStretchLastSection(true);  

说明:该代码是实现将header最后的空间补全,仅仅是通过延伸最后一个单元实现的,而没有单元格平分;幸好有如下代码。

3、将QTableWidget单元格平分:

[cpp] view plaincopy
 
  1. ui->twOrderDish->horizontalHeader()->setResizeMode(QHeaderView::Stretch);  

使用这段代码即可实现将单元格平分了,对于行高的设置和这个设置类似,看如下代码:

[cpp] view plaincopy
 
  1. ui->twOrderDish->verticalHeader()->setResizeMode(QHeaderView::Stretch);  

 

[cpp] view plaincopy
 
    1. ui->twOrderDish->horizontalHeader()->setStretchLastSection(true);

 

转自:http://blog.csdn.net/leo115/article/details/7665090

posted on 2013-06-21 15:22  veins  阅读(1732)  评论(0编辑  收藏  举报

导航