Qt tablewidget 获取表格一行内容并显示在下一行

版权声明:转载请说明 https://blog.csdn.net/weixin_41712355/article/details/81502085

在构造函数使用前两句设置每次点击一个item能够选中一整行以及编辑item功能

pushButton槽里面获取当前点击的item行列数

然后通过循环使用text().toStdString()获取item的内容并显示到指定的item上

ui->tableWidget->setItem(now_row+1,now_column,e);

//设置选择行为时每次选择一行   
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
//设置任何时候都可以编辑
ui->tableWidget->setEditTriggers(QAbstractItemView::CurrentChanged);

void Mainwindow::on_pushButton_clicked(){

//获取当前点击的item行列数
int now_column = ui->tableWidget->currentColumn();
    
int now_row = ui->tableWidget->currentRow();
    
//如果不是点击在第一列则获取到第一列
if(now_column != 0)
   
 {
    
    now_column = 0;
  
  }
  
//表格有5列
  for(int i =0;i<5;i++)
  
  {
   
   string qsa1 =  ui->tableWidget->item(now_row,now_column)->text().toStdString();
     
   QString s1 = QString::fromStdString(qsa1);
    
  //传入qsting值
   QTableWidgetItem *e =new QTableWidgetItem(s1);
     
   ui->tableWidget->setItem(now_row+1,now_column,e);
     
   now_column++;

 }

}

 以上代码实现会出现问题

当表格里面的item是空的时候程序会中断

因为当item是空的时候,

ui->tableWidget->item(now_row,now_column);

得到的是一个空指针所以不能用text()去获取文本!

void Load_a_reference::on_pushButton_clicked()
{
    qDebug()<<123<<endl;
    //判断是否选中item
	if (ui->tableWidget->selectedItems().size() == 0)
	{
		qDebug() << "select items count" << ui->tableWidget->selectedItems().size();
		return;
	}

    int now_column = ui->tableWidget->currentColumn();
    int now_row = ui->tableWidget->currentRow();
    if(now_column != 0)
    {
        now_column = 0;
    }
    for(int i =0;i<5;i++)
    {
        //如果item是空的则跳过
		if (ui->tableWidget->item(now_row, now_column) == NULL)
		{
		continue;
		}
        //s1是一个QString全局变量
		s1 = ui->tableWidget->item(now_row, now_column)->text();
        QTableWidgetItem *e =new QTableWidgetItem(s1);
        ui->tableWidget->setItem(now_row+1,now_column,e);
        now_column++;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41712355/article/details/81502085