Qt QTableView 上加右键弹出菜单, 并复制选中的单元格内容到剪贴板中
- 格式:pdf
- 大小:53.25 KB
- 文档页数:4
QtQTableView上加右键弹出菜单,并复制选中的单元格内
容到剪贴板中。
private:
QAction*copyAct;
privateslots:
voidcopyData();
ui->tableView->setSelectionMode(QAbstractItemView::ContiguousSelection);//设置为连续选择模式
ui->tableView->setContextMenuPolicy(Qt::ActionsContextMenu);//设置为action菜单模式
ui->tableView->addAction(this->copyAct);
//感觉复制多选的单元格,自己想的比较笨的办法,不知道是否还有更好的办法
voidMainWindow::copyData()
{
intmaxCol=0;
intmaxRow=0;
intminCol=0;
intminRow=0;QMap
QModelIndexListindexes=ui->tableView->selectionModel()->selectedIndexes();
if(indexes.count()==0)
{
showmessage(QObject::tr("selectnothing"));
return;
}
QModelIndexindex;
intk=0;
foreach(index,indexes){
intcol=index.column();
introw=index.row();
if(k==0)
{
minCol=col;
minRow=row;
}
if(col>maxCol)maxCol=col;
if(row>maxRow)maxRow=row;QStringtext=index.model()->data(index,Qt::EditRole).toString();
map[QString::number(row)+","+QString::number(col)]=text;
k++;
}
QStringrs="";
for(introw=minRow;row<=maxRow;row++)
{
for(intcol=minCol;col<=maxCol;col++)
{
if(col!=minCol)rs+="\t";
rs+=map[QString::number(row)+","+QString::number(col)];}
rs+="\r\n";
}
QClipboard*board=QApplication::clipboard();
board->setText(rs);
}多选单元格的效果
鼠标右键选择copy
复制出的内容如下:
28497523931223852652150265269817591527532297252865