QStandardItemModel,基于项的模型类,每一项都是一个QStandardItem对象
QItemSelectionModel选择模型,跟踪视图组件的单元格选择状态。
1. 设置中心部件(Central Widget)
setCentralWidget(ui->splitter);
Qt中的主窗口通常由几个部分组成,其中一个重要的部分是中心部件,它占据主窗口的中心区域。这个中心部件可以是任何继承自QWidget
的对象,比如QSplitter
、QTextEdit
、QTableView
等。
2.样式设置
设置表格的线属性
this->setShowGrid(false); // 隐藏网格线
this->setGridStyle(Qt::DotLine); // 线的样式
this->setFocusPolicy(Qt::NoFocus); // 取消Item选中后的虚线边框
ui->tableView->setAlternatingRowColors(true);//设置换行颜色变化
ui.wait_check_field_table_->setColumnCount(2);
ui.wait_check_field_table_->setHorizontalHeaderLabels({ "点击查询字段","列号" });
ui.wait_check_field_table_->horizontalHeader()->setMinimumSectionSize(100);
ui.wait_check_field_table_->setColumnWidth(0, 200);
ui.wait_check_field_table_->setColumnWidth(1, 80);
ui.wait_check_field_table_->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);//表头文字左对齐
ui.wait_check_field_table_->horizontalHeader()->setStretchLastSection(true);//最后一列拉伸
ui.wait_check_field_table_->setAlternatingRowColors(true);//隔行换色
ui.wait_check_field_table_->verticalHeader()->setVisible(false); //隐藏列表头
ui.wait_check_field_table_->setShowGrid(false);//不显示格子线
ui.wait_check_field_table_->setEditTriggers(QTableView::EditKeyPressed | QTableView::DoubleClicked);//可疑编辑
ui.wait_check_field_table_->horizontalHeader()->setSectionsClickable(true);//设置表头可点击
ui.wait_check_field_table_->setContextMenuPolicy(Qt::CustomContextMenu);//添加右键菜单
ui.wait_check_field_table_->setSelectionMode(QAbstractItemView::SingleSelection);//设置选中模式
//ui.wait_check_field_table_->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中状态
//支持拖放操作
ui->tableView->setDragEnabled(true);
ui->tableView->setAcceptDrops(true);
ui->tableView->setDropIndicatorShown(true);
//设置拖放模式为移动项目,如果不设置,则为复制项目
ui->tableView->setDragDropMode(QAbstractItemView::InternalMove);
添加右键菜单的两种方式
ui->tableView->installEventFilter(this);
bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
if(object==ui->tableView&&event->type()==QEvent::ContextMenu){
if(ui->tableView->currentIndex().isValid()){
QMenu * menu = new QMenu();
menu->addAction("添加");
menu->addAction("删除");
QAction * action = menu->exec(cursor().pos()); // 弹出菜单
if(action == nullptr){
return QWidget::eventFilter(object, event);
}
if(action->text()=="添加"){
QList<QStandardItem*> list;
list<<new QStandardItem("QQ")<<new QStandardItem("QQ")<<new QStandardItem("QQ")<<new QStandardItem("QQ");
m_model->insertRow(m_model->rowCount(),list);
}
if (action->text() == "删除") {
m_model->removeRow(ui->tableView->currentIndex().row());
}
}
}
return QWidget::eventFilter(object, event);
}
ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableView,&QTableView::customContextMenuRequested,[=](const QPoint &pos){
QMenu * menu = new QMenu();
menu->addAction("添加");
menu->addAction("删除");
QAction * action = menu->exec(QCursor::pos()); // 弹出菜单
});