Qt QTableView 上加右键弹出菜单, 并复制选中的单元格内容到剪贴板中.pdf
文本预览下载声明
Qt QTableView 上加右键弹出菜单, 并复制选中的单元格内
容到剪贴板中。
private:
QAction *copyAct;
private slots:
void copyData();
ui-tableView-setSelectionMode(QAbstractItemView::ContiguousSelectio
n); //设置为连续选择模式
ui-tableView-setContextMenuPolicy(Qt::ActionsContextMenu); //设置为
action菜单模式
ui-tableView-addAction(this-copyAct);
//感觉复制多选的单元格,自己想的比较笨的办法,不知道是否还有更好的办法
void MainWindow::copyData()
{
int maxCol=0;
int maxRow=0;
int minCol=0;
int minRow=0;
QMapQString,QString map ;
QModelIndexList indexes
=ui-tableView-selectionModel()-selectedIndexes();
if (indexes.count()==0)
{
showmessage(QObject::tr(select nothing));
return;
}
QModelIndex index;
int k=0;
foreach(index, indexes) {
int col=index.column();
int row=index.row();
if (k==0)
{
minCol=col;
minRow=row;
}
if (colmaxCol)maxCol=col;
if (rowmaxRow)maxRow=row;
QString text = index.model()-data(index,
Qt::EditRole).toString();
map[QString::number(row) + , +
QString::number(col)]=text;
k++;
}
QString rs=;
for (int row=minRow;row=maxRow;row++)
{
for (int col=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
复制出的内容如下:
28497 52393
12238 52652
15026 52698
17591 52753
22972 52865
显示全部