Qt_QTableWidget用法 添加、删除、添加控件、获取控件在表格中位置

效果如下

在这里插入图片描述

1. Table 初始化属性

1.隐藏表头 列号
2.默认行高
3.自适应列宽
4.隐藏表格框线
5.滚动条样式定义

void createLogged::createTabelView()
{
    /*表格属性设置*/
    m_pTableWidget = new QTableWidget(this);
    m_pTableWidget->resize(414,418);
    m_pTableWidget->move(21,43);
    m_pTableWidget->setFrameShape(QFrame::NoFrame);
    m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    m_pTableWidget->setSelectionMode(QAbstractItemView::NoSelection);
    m_pTableWidget->setFocusPolicy(Qt::NoFocus);
    m_pTableWidget->verticalHeader()->setDefaultSectionSize(24); //设置默认行高
    m_pTableWidget->setShowGrid(false);
    m_pTableWidget->verticalHeader()->hide();                    //隐藏默认显示的行头
    m_pTableWidget->horizontalHeader()->hide();                  //隐藏默认显示的列头
    m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);  //设置表格属性只读,不能编辑
    //m_pTableWidget->verticalHeader()->setSectionResizeMode(row, QHeaderView::ResizeToContents); //自适应行高
    m_pTableWidget->setColumnCount(3);
    m_pTableWidget->setColumnWidth(0,40);       //设定表格第0列宽度
    m_pTableWidget->setColumnWidth(1,320);
    m_pTableWidget->setColumnWidth(2,24);
    m_pTableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //自适应列宽
    m_pTableWidget->setStyleSheet("QTableWidget{"
                                    "background:transparent;"
                                    "color:#ffffff;}"
                                    "QScrollBar::vertical {"
                                      "width:10px;"
                                      "background-color:rgb(13,17,47);"
                                      "border:none;"
                                      "border-radius:5px;"
                                    "}"
                                    "QScrollBar::handle:vertical {"
                                      "background-color: rgb(74,96,160);"
                                      "min-height:20px;"
                                      "border-radius:5px;"
                                      "width:10px;"
                                    "}"
                                    "QScrollBar::add-line:vertical {height: 0px;}"
                                    "QScrollBar::sub-line:vertical {height: 0px;}"
                                    "QScrollBar::add-page:vertical {background: none;}"
                                    "QScrollBar::sub-page:vertical {background: none;}"
                                  );
    m_pTableWidget->show();
}

2.按钮删除行

以下代码有删减

void createLogged::slotBtnDel()
{
    /*1.获取按钮在表格中的行列位置*/
    QPushButton *sigBtn = qobject_cast<QPushButton*>(sender());
    QModelIndex modelIndex = m_pTableWidget->indexAt(sigBtn->pos());
    int row = modelIndex.row();

    /*2.找到Map中按钮所对应的的日志Id*/
    QMap<QPushButton *,QString>::const_iterator mapBtnAndId = m_mapLog.find(sigBtn); //找到所删除按钮对应的记录 Id
    QString strLogId = mapBtnAndId.value();

    /*3.计算记录行数*/
    StPushLog st = m_pTableLog->queryRow(strLogId);
    int nItem = st.vecRecvNodes.count(); //获取记录子项数

    /*4.删除*行记录*/
    for(int i = 0; i < nItem+2; i++){ //删除子项加1  行内容
        m_pTableWidget->removeRow(row);
    }

    /*5. 删除Map中的记录*/
    m_mapLog.remove(sigBtn);

    /*6.刷新序号列编号*/
    int nNum = 1;
    for(int i = 0; i < m_pTableWidget->rowCount();i++)
    {
        QPushButton *pBtna = qobject_cast<QPushButton *>(m_pTableWidget->cellWidget(i,2));
        if(m_mapLog.contains(pBtna))
        {
            QTableWidgetItem *itemNo = new QTableWidgetItem(QString::number(nNum) + ".");
            m_pTableWidget->setItem(i,0,itemNo);
            nNum++;
        }
    }
}
3.表中添加控件

以下代码有删减

    /*1.添加空行*/
    int row = m_pTableWidget->rowCount();//获取总行数
    m_pTableWidget->setRowCount(row+vecLog.count()+2); //添加空行 用于添加数据
    /*2.添加序号*/
    QTableWidgetItem *itemNo = new QTableWidgetItem(QString::number(m_mapLog.count()+1) + ".");
    m_pTableWidget->setItem(row,0,itemNo);

    /*3.添加信源送往*/
    QTableWidgetItem *item = new QTableWidgetItem("国际会议室大厅-信号源-送往:");

    item->setFont(QFont("SimHei",14));
    m_pTableWidget->setItem(row,1,item);
    //m_pTableWidget->verticalHeader()->setSectionResizeMode(row, QHeaderView::ResizeToContents); //自适应行高

    /*4.添加撤销记录按钮*/
    QPushButton *pBtnDel = new QPushButton;
    QString strTmp = "border-image:url(" + m_strImagePath + "SignPushPage/btn_delete.png);";
    pBtnDel->setStyleSheet(strTmp);
    pBtnDel->setFixedSize(24,24);
    connect(pBtnDel,SIGNAL(clicked()),this,SLOT(slotBtnDel()));
    m_pTableWidget->setCellWidget(row,2,pBtnDel);

    QStringList listl;
    listl<<"你家"<<"我家"<<"他家";
    /*5.添加推送子区域*/
    for(int i = 0;i < vecLog.count();i++){
        QTableWidgetItem *tmpItem = new QTableWidgetItem(listl.at(i%3));
        tmpItem->setFont(QFont("SimHei",12));
        m_pTableWidget->setItem(row+i+1,1,tmpItem);
    }
    m_pTableWidget->setRowHeight(row+vecLog.count()+1,10); //设置空白行行高
    m_pTableWidget->scrollToBottom(); //滚动显示底部

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在QTableWidget的列头添加件,需要自定义QHeaderView并将其设置为QTableWidget的水平表头。下面是完整的代码示例: ```python from PyQt5 import QtWidgets, QtGui, QtCore class MyHeader(QtWidgets.QHeaderView): def __init__(self, parent): super().__init__(QtCore.Qt.Horizontal, parent) self.setSectionResizeMode(QtWidgets.QHeaderView.Stretch) self._widget = QtWidgets.QComboBox(self) self._widget.addItems(['Option 1', 'Option 2', 'Option 3']) self.sectionResized.connect(self.adjust_widget) def setModel(self, model): super().setModel(model) self.adjust_widget() def adjust_widget(self, index=0): rect = self.sectionViewportPosition(index) height = self.height() - rect self._widget.setGeometry(rect, 0, self.sectionSize(index), height) class MyTableWidget(QtWidgets.QTableWidget): def __init__(self, parent=None): super().__init__(parent) self.setHorizontalHeader(MyHeader(self)) self.setColumnCount(3) self.setRowCount(5) for row in range(5): for col in range(3): item = QtWidgets.QTableWidgetItem(f"Item {row+1}-{col+1}") self.setItem(row, col, item) if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) window = MyTableWidget() window.show() sys.exit(app.exec_()) ``` 这个例子创建一个3列5行的表格,并在第一列的表头添加了一个下拉框件。在MyHeader类,我们创建了一个QComboBox件并在构造函数将其添加到自定义的表头。我们还在setModel和adjust_widget方法处理了件的大小和位置。在MyTableWidget类,我们将自定义的表头设置为QTableWidget的水平表头。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值