• QTableWidget 使用方法


    行列

    添加表头,隐藏/显示 行号

    //设置列表头
    QStringList  labels;
    labels <<" "<< QStringLiteral("编号") << QStringLiteral("速度") << QStringLiteral("操作") << " ";
    ui.tableWidget->setColumnCount(5);
    ui.tableWidget->setHorizontalHeaderLabels(labels);
     
    //显示行号列
    QHeaderView* headerView = ui->tableWidget->verticalHeader();
    headerView->setHidden(false); //false 显示行号列  true Hide
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    关于QTableWidget 表头设置无效的原因

    表头无效一般是由于 未设置列数量;
    调用 setColumnCount 后,再调用 setHorizontalHeaderLabels 即可生效;;

    当然最好的情况是 setHorizontalHeaderLabels 时根据参数的大小自动设置列数; 但QT未支持;

    调整表头大小对齐

      tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);//使列完全填充并平分
    
      tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);//行自适应宽度                                                                                                      
    
      tableWidget->resizeColumnsToContents(); //根据内容调整列宽
    
      tableWidget->resizeColumnToContents(int col);//根据内容自动调整给定列宽
    
      tableWidget->horizontalHeader()->setResizeMode//把给定列设置为给定模式
    
      //主要模式有Stretch和Fixed
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    QTableWidget列宽随心设置

    tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    //x先自适应宽度
    tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);     //然后设置要根据内容使用宽度的列
    
    • 1
    • 2

    QTableWidget列宽随心设置参考

    表头样式参考

    去掉表头分割竖线
    在这里插入图片描述

     ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{border:none;background-color:rgb(255,255,255);color: black;height: 32px;}");
    
    • 1

    添加数据

    ui.tableWidget->setRowCount(rowNum);
    for ( 。。。)
    {
    	QTableWidgetItem* pRowItem =new QTableWidgetItem(row);
    	pRowItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//单元格内容居中对齐
    	ui.tableWidget->setItem(row, 1, pRowItem);
    
    	QString strPositionName = item.vecColumnInfo.at(0).strText;
    	QTableWidgetItem* pName = new QTableWidgetItem(strPositionName);
    	pName->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    	ui.tableWidget->setItem(row, 2, pName);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    需要注意:
    使用setItem插入数据之前要设置行数:ui.tableWidget->setRowCount(rowNum);
    也可以在for里面动态设置行数

    for(   )
    {
    	...
    	ui.tableWidget->setRowCount(row+1);
    	ui.tableWidget->setItem(row, ...);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    插入的数据不显示

    1、如果是调用insertRow插入行的,再调setRowHeight设置行高就可以了。
    2、如果不是,那可能是rowCount返回的是0,这需要调setRowCount设置行数或者调insertRow插入行,再调setRowHeight设置行高就可以了

    QTableWidget中添加QPushButton

     // 创建QPushButton控件
    QPushButton *pBtn = new QPushButton();  
    
    // 绑定信号
    connect(pBtn, SIGNAL(clicked()), this, SLOT(OnBtnClicked()));  
    
    // 在QTableWidget中添加控件
    tableWidget->setCellWidget(0,0,pBtn); 
    
    // 绑定的响应函数
    void OnBtnClicked(void)  
    {  
        QPushButton *senderObj=qobject_cast<QPushButton*>(sender());  
        if(senderObj == nullptr)  
        {  
            return;  
        }  
        QModelIndex idx =tableWidget->indexAt(QPoint(senderObj->frameGeometry().x(),senderObj->frameGeometry().y()));  
        int row=idx.row();  
        // 其他响应信息......
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    样式

    去掉网格线

    ui.tableWidget->setShowGrid(false);
    
    • 1

    去掉 QTabWidget 的边框

    ui.tableWidget->setStyleSheet("QTableWidget{border: none;}")
    
    • 1

    例子

    去掉表头分割线,去掉表的边框和网格线,只留下横线
    在这里插入图片描述

    	ui.tableWidget->setShowGrid(false);
    	ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{border:none;background-color:rgb(255,255,255);color: black;height: 32px;}");
    	ui.tableWidget->setStyleSheet(
    		"QTableWidget{border: none;}"
    		"QTableWidget::Item{border:0px solid rgb(255,255,255);border-bottom:1px solid rgb(232,232,232);background-color:rgb(255,255,255);color: rgb(89,89,89);}"
    		"QTableWidget::Item:selected{background-color:rgb(255,255,255);color: rgb(24,144,255);}"
    	);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    QTableWidget的用法总结

    QTabWidget 样式表

  • 相关阅读:
    Java创建对象的最佳方式:单例模式(Singleton)
    Vivado 2017.04版本安装教程
    Maya制作骑自行车的女孩模型
    qtchooser 配置和使用多个Qt版本
    Konva离屏缓存
    uniapp tabBar app页面滚动闪屏的问题
    神经网络的三种训练方法,神经网络训练过程图解
    linux查找目录
    ES filter查询 高亮查询 聚合查询
    AtCoder Beginner Contest 350
  • 原文地址:https://blog.csdn.net/fuyouzhiyi/article/details/126265467