一 、 多选
有两种方法得到多选的 item, 效果是相同的。
QStandardItemModel *standardModel = new QStandardItemModel(this);
QItemSelectionModel *selectModel = new QItemSelectionModel(standardModel);
void MainWindow::on_action_bold_triggered()
{
// 第一种方法: 通过 QItemSelectionModel
if(!selectModel->hasSelection())
return;
QModelIndexList modelList1 = selectModel->selectedIndexes();
// 第二种方法: 通过tableView
QModelIndexList modelList2 = ui->tableView->selectionModel()->selectedIndexes();
foreach(QModelIndex index, modelList1)
{
QStandardItem *item = standardModel->itemFromIndex(index);
QFont font = item->font();
font.setBold(!font.bold());
item->setFont(font);
}
}
二、 右键菜单
通 QModelIndex 的 isValid() 屏蔽掉 空白地方
QCursor::pos() 是鼠标在界面上的位置, 也是菜单显示位置
void MainWindow::on_tableView_customContextMenuRequested(const QPoint &pos)
{
QModelIndex index = ui->tableView->indexAt(pos);
if (index.isValid())
{
QMenu *menu = new QMenu(this);
menu->addAction(ui->action_delete);
menu->addAction(ui->action_instreat);
menu->addSeparator();
menu->addAction(ui->action_preview);
menu->addAction(ui->action_saveAs);
menu->exec(QCursor::pos());
}
}
这是多选的界面效果