QT

Qt QTableWidget에서의 Copy & Paste & Delete 방법

이건칠 2018. 8. 17. 09:31

TableWidgetCV.zip


CustomTableWidget 클래스 생성

void CustomTableWidget::keyPressEvent(QKeyEvent *event)
{
     QModelIndexList selectedModel=selectedIndexes(); //cell selected
     qSort(selectedModel.begin(),selectedModel.end()); //ASC sort
     if(event->matches(QKeySequence::Delete)) //del key
     {
          foreach (QModelIndex index, selectedModel)
          {
               QTableWidgetItem *delItem=item(index.row(),index.column());
               if(delItem!=NULL)
               {
                    item(index.row(),index.column())->setText("");
               }
          }
     }
     if(event->matches(QKeySequence::Copy)) //ctrl + c
     {
           if(selectedModel.isEmpty())
           {
                return;
           }
           copyIndexList=selectedModel;
     }
     if(event->matches(QKeySequence::Paste)) //ctrl + v
     {
         if(!copyIndexList.isEmpty())
         {
              if(selectedModel.isEmpty())
              {
                   return;
              }
              int startRow=selectedModel.first().row();
              int startColumn=selectedModel.first().column();
              int copyListFirstRow=copyIndexList.first().row();
              int copyListFirstColumn=copyIndexList.first().column();

              foreach (QModelIndex index, copyIndexList)
              {
                   if(copyListFirstRow!=index.row())
                   {
                         startRow+=index.row()-copyListFirstRow;
                         copyListFirstRow=index.row();
                   }


                  if(copyListFirstColumn!=index.column())
                  {
                        startColumn+=index.column()-copyListFirstColumn;
                        copyListFirstColumn=index.column();
                  }
                  setItem(startRow,startColumn,new QTableWidgetItem(item(index.row(),index.col                   umn())->text()));
            }
        }
    }
}