QTableWidget行选中/删除/添加行

1  均分各列

 tableWidget->horizontalHeader()->setStretchLastSection(true); //就是这个地方
 tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
2   整行选中:

tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //设置选择行为,以行为单位
tableWidget->setSelectionMode ( QAbstractItemView::SingleSelection); //设置选择模式,选择单行

3  删除选中的整行

 int rowIndex = m_pAttrbuteList->currentRow();
 if (rowIndex != -1)
     tableWidget->removeRow(rowIndex);


        为了将数据能够在界面中显示的更清楚一些,在这里应用到了tableWidget控件,现将该控件中删除指定行的代码介绍如下:

   QTable里有一个removeRow(int i)函数用来删除当前行,但是如果我们没有对于table进行任何的选中,那么QTable是如何返回的呢?
 用Qt Creator里拖了一个tableWidget,加一个按钮,点击删除后执行
 int i = ui->tableWidget->currentRow();
 QMessageBox msg;
 msg.setText(QString::number(i));
 msg.exec();
 ui->tableWidget->removeRow(i);
 在不选择行的情况下发现每次点击后删除的都是第一行,i的输出都是0.


       原因其实很简单,就是因为table的当前焦点在第一样的第一个单元格所导致的,解决的办法就是让table失去焦点,在构造函数里面添加ui->tableWidget->setFocusPolicy(Qt::NoFocus);
然后再试,发现点击删除按钮如果不选中行的话是不能删除的,返回的i此时是-1。

控件刚开始的时候左边默认自带序列号,如果想去掉左边的行号,加上下面的代码就可以了。

      QHeaderView* headerView = table的名字->verticalHeader();
      headerView->setHidden(true);

4 添加整行

int rowIndex = m_pAttrbuteList->rowCount();
 tableWidget->setRowCount(rowIndex + 1);//总行数增加1

 tableWidget->setRowHeight(rowIndex, 24);//设置行的高度

--------------------------------------------------------------------------------

QTableWidget *table = new QTableWIdget(this);

table->setColumnCount(5);    //设置列数

table->setRowCount(3);        //设置行数/

/*设置列名*/

QStringList headers;

headers<<"列名1"<<"列名2"<<"列名3";

table->setHorizontalHeaderLabels(headers);

/*给单元格添加内容*/

void addItemContent(int row, int column, QString content)

{

      QTableWidgetItem *item = new QTableWidgetItem (content);

      table->setItem(row, column, item);

}

/*给单元格中增加图标*/

QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL);  //只加入图标,没有字符串

QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString);   //加入图标和字符串

table->setItem(row, column, item);

/*插入一行*/

int row = table->rowCount();

table->insertRow(row);

/*插入一列*/

int column = table->columnCount();

table->insertColumn(column);

 //使行列头自适应宽度,最后一列将会填充空白部分

table->horizontalHeader()->setStretchLastSection(true);          

//使行列头自适应宽度,所有列平均分来填充空白部分            

table->horizontalHeader()->setResizeMode(QHeaderView::Strtch);       

//使行自适应高度,假如行很多的话,行的高度不会一直减小,当达到一定值时会自动生成一个QScrollBar

table->verticalHeader()->setResizeMode(QHeaderView::Strtch);

//设置单击选择一行

table->setSelectionBehuavior(QAbstractItemView::SelectRows);

//设置每行内容不可编辑

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

//设置只能选择一行,不能选择多行

table->setSelectionMode(QAbstractItemView::SingleSelection);

/*去掉每行的行号*/

QHeaderView *headerView = table->verticalHeader();

headerView->setHidden(true);

/*设置让某个单元格或某行选中*/

选中单元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);

选中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此处的列没有值)

 

  • 21
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用以下步骤在QTableWidget选中删除: 1. 获取当前选中号 ``` selected_row = tableWidget.currentRow() ``` 2. 如果选中不为空,则删除 ``` if selected_row != -1: tableWidget.removeRow(selected_row) ``` 完整的代码示例: ``` from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QWidget, QVBoxLayout, QPushButton class MyWindow(QWidget): def __init__(self): super().__init__() self.tableWidget = QTableWidget() self.tableWidget.setRowCount(4) # 设置数 self.tableWidget.setColumnCount(2) # 设置列数 # 在单元格中添加数据 for row in range(4): for column in range(2): item = QTableWidgetItem("Cell %d-%d" % (row, column)) self.tableWidget.setItem(row, column, item) self.delete_button = QPushButton('删除选中') self.delete_button.clicked.connect(self.delete_selected_row) layout = QVBoxLayout() layout.addWidget(self.tableWidget) layout.addWidget(self.delete_button) self.setLayout(layout) def delete_selected_row(self): selected_row = self.tableWidget.currentRow() if selected_row != -1: self.tableWidget.removeRow(selected_row) if __name__ == '__main__': app = QApplication([]) window = MyWindow() window.show() app.exec_() ``` 在此示例中,我们创建了一个QTableWidget、一个QPushButton,并将它们放在一个垂直布局中。当用户点击删除按钮时,我们将调用delete_selected_row函数,该函数会获取当前选中号,并在选中不为空时删除
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值