24. QTableview界面设置--Apple的学习笔记
2021-08-15 本文已影响0人
applecai
一,前言
上一节是QT节点编程,DaVinci Developer中就有类似的绘图。而此工具中绘图不是自定义的,而是先创建swc port interface后,按这些数据自动绘图的。所以它有接口连接窗口,我就模拟此工具的这个界面功能,自己通过QT6来实现。
二,需求
能访问sqlite数据库,通过重组表数据后,显示界面内容到QTableview,设置QTableview的一些属性,使其界面和DaVinci Developer的接口连线界面效果类似。
三,遇到的问题
QTableview之前玩过,也看过QT6自带的help,但是自己操作比较少,印象不深刻,不熟练。本次都是小问题。
- Qtableview排序?
答:用QSortFilterProxyModel来代理。 - 隐去第一列默认数字?
答:tableview->verticalHeader()->hide(); - 选中整行?
答:tableview->setSelectionBehavior(QAbstractItemView::SelectRows); - 右键时候获取选中行内容?
答:有2种方法
#if 0
int row = tableview->currentIndex().row();
int col = tableview->currentIndex().column();
qDebug()<<m_DB->model->item(row, col)->text();
#endif
qDebug()<<tableview->indexAt(currentpos).data().toString();
5.QTableview在有内容的行中选中才有右键,否则无右键弹出?
答:用index.isValid()。
void connnectPort::createContextMenu(const QPoint &pos)
{
currentpos = pos;
QModelIndex index = tableview->indexAt(pos);
if (index.isValid())
{
QMenu *pMenuRight = new QMenu(this);
QAction *pActionConn = new QAction(tr("新建连接"));
pMenuRight->addAction(pActionConn);
connect(pActionConn,&QAction::triggered,this,&connnectPort::showPreparedPort);
//菜单出现的位置为当前鼠标的位置
pMenuRight->exec(QCursor::pos());
}
}
- 删除选中时候的单元格虚线
答:用QStyledItemDelegate代理类重绘,tableview>setItemDelegate(new CommonDelegate());
- sql搜索某列为空?
答:where 字段 is null
即可。 - 添加图标的方法?
答:关键是icon,简单的方法如下
newColumn = new QStandardItem(QIcon(":/res/image/file.png"),swc);
NewRow.append(newColumn);
四,效果
数据库设计比较简单,主要是做demo练习用,目的是把方法先跑通,进行可行性验证。右击连接主界面后弹出筛选后可连接的接口项,双击后我没有保存到数据库,本次双击后就先显示双击行中的swc名字。
image.png
image.png
五,小结
主界面的数据库信息不是直接查询的,是查询后一条条再制作到标准item中,这样处理大数据的话效率不高。将来数据库还是要重新设计下,而且还是要学习自定义model,以及Qtableview界面重绘,比如高亮标题栏等。本次先做个小练习,掌握些界面属性设计及事件应用。
学习顺序总是先学会基本使用,然后找到原始控件的不足点,再去学灵活定制吧,我的周末过的好有成就感,通过模仿,距离我能制作专业工具又迈进一小步,哈哈~