QTableWidget的使用

QTableWidget的常用属性设置。

  1. 设置滚动条隐藏
table->horizontalScrollBar()->setVisible(false);
table->verticalScrollBar()->setVisible(false);

  1. 设置整行选中
table->setSelectionBehavior(QAbstractItemView::SelectRows);

  1. 设置不可编辑
table->setEditTriggers(QAbstractItemView::NoEditTriggers); 

  1. 设置列数
table->setColumnCount(3);

  1. 设置隐藏线框
table->setShowGrid(false);

  1. 设置列宽
table->setColumnWidth(0, 20);
table->setColumnWidth(1, 128);
table->setColumnWidth(2, 20);

  1. 设置表头隐藏
table->horizontalHeader()->setHidden(true);
table->verticalHeader()->setHidden(true);

  1. 设置表头名称
QStringList header; header<<"子系统路口"<<"上移";
table->setHorizontalHeaderLabels(header);

  1. 设置表头宽度内容自适应
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);

  1. 在表中添加右键弹出功能
table->setContextMenuPolicy(Qt::CustomContextMenu);
connect(table, SIGNAL(customContextMenuRequested ( const QPoint&)), this , SLOT(rightClickedOperationPRJ(const QPoint&))); //右键

  1. 在表格中显示图片
    QTableWidget中的表格显示图片有几种方式:
    需要先将图片加载为资源。

1)方式1:直接在创建QTableWidgetItem的时候创建,如

tableWdiget->setItem(0,1,new QTableWidgetItem(QIcon(":/image/cpu")," "));

2)方式2:通过在item中创建一个label,通过label的setPixMap函数来显示图片:

QLabel *label = new QLabel("");
label->setPixmap(QPixmap(":/image/grid").scaled(30,30));
ui->matrixViewTable->setCellWidget(0,i,label);

3)方式3:通过继承 QStyledItemDelegate类使用委托来实现item中显示图片:

class QPixmapItemdele : public QStyledItemDelegate
{
public:
    QPixmapItemdele(QObject* parent = 0):QStyledItemDelegate(parent){ }
    //在委托类的paint中画图
    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        if(index.data(Qt::DisplayRole).canConvert<QPixmap>())
        {
            QPixmap pix = index.data(Qt::DisplayRole).value<QPixmap>();
            painter->drawPixmap(option.rect,pix);
        }
        QStyledItemDelegate::paint(painter,option,index);
    }
};

然后为tablewidget设置委托,后面就可以设置具体的某项的图片:

 	ui->matrixViewTable->setItemDelegate(new QPixmapItemdele());
       //以下是设置第一行的所有列的图片
    for(int i=0; i<ui->matrixViewTable->columnCount(); i++)
    { 
        QTableWidgetItem *item = new QTableWidgetItem();
        ui->matrixViewTable->setItem(0,i,item);
        item->setData(Qt::DisplayRole,QVariant::fromValue<QPixmap>(QPixmap(":/image/grid").scaled(30,30)));
    }

以上三种方法:

  • 方法一直接在item上创建Icon,则表中每个Item表示为左边icon,右边为icon对应的text,即使text为空,也会留出很大的空间出来,导致左边的icon很小,

    可以用以下语句来设置左边图标大小:

ui->matrixViewTable->setIconSize(QSize(30,30));

但是右边还是有text留出来的空间,如果想让icon充满整个item,则此方法没法达成。

  • 方法二通过item中创建label来setPixMap的方式可以让icon充满整个item,但是显示出来的icon用鼠标点击不会有选择动作发生,或者也许可以处理点击事件(未试过,不知是否能行)。

  • 方法三继承委托能够让图片充满整个item,同时选择图片时,会出现选择框,不至于像法二一样点击了没有任何反应。


  1. 设置单元格文本居中,张三的数据设置为居中显示
table->item(0, 0)->setTextAlignment(Qt::AlignCenter);
table->item(0, 1)->setTextAlignment(Qt::AlignCenter);

  1. 设置单元格文本颜色,张三的数据设置为红色
table->item(0, 0)->setForeground(QBrush(QColor(255, 0, 0))); 
 table->item(0, 1)->setForeground(QBrush(QColor(255, 0, 0))); 

  1. 将字体加粗
table->item(0, 0)->setFont( QFont( "Times", 10, QFont::Black ) );
table->item(0, 1)->setFont( QFont( "Times", 10, QFont::Black ) );

  1. 设置排序方式,按年龄降序显示
 table->sort(3, Qt::DescendingOrder);
ui->tableView->resizeRowsToContents();//所有行高度自适应
ui->tableView->resizeColumnsToContents();//所有行宽度自适应
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值