C++

24. QTableview界面设置--Apple的学习笔记

2021-08-15  本文已影响0人  applecai

一,前言

上一节是QT节点编程,DaVinci Developer中就有类似的绘图。而此工具中绘图不是自定义的,而是先创建swc port interface后,按这些数据自动绘图的。所以它有接口连接窗口,我就模拟此工具的这个界面功能,自己通过QT6来实现。

二,需求

能访问sqlite数据库,通过重组表数据后,显示界面内容到QTableview,设置QTableview的一些属性,使其界面和DaVinci Developer的接口连线界面效果类似。

三,遇到的问题

QTableview之前玩过,也看过QT6自带的help,但是自己操作比较少,印象不深刻,不熟练。本次都是小问题。

  1. Qtableview排序?
    答:用QSortFilterProxyModel来代理。
  2. 隐去第一列默认数字?
    答:tableview->verticalHeader()->hide();
  3. 选中整行?
    答:tableview->setSelectionBehavior(QAbstractItemView::SelectRows);
  4. 右键时候获取选中行内容?
    答:有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());
    }
}
  1. 删除选中时候的单元格虚线
    答:用QStyledItemDelegate代理类重绘,tableview>setItemDelegate(new CommonDelegate());
  2. sql搜索某列为空?
    答:where 字段 is null即可。
  3. 添加图标的方法?
    答:关键是icon,简单的方法如下
newColumn = new QStandardItem(QIcon(":/res/image/file.png"),swc);
NewRow.append(newColumn);

四,效果

数据库设计比较简单,主要是做demo练习用,目的是把方法先跑通,进行可行性验证。右击连接主界面后弹出筛选后可连接的接口项,双击后我没有保存到数据库,本次双击后就先显示双击行中的swc名字。


image.png
image.png

五,小结

主界面的数据库信息不是直接查询的,是查询后一条条再制作到标准item中,这样处理大数据的话效率不高。将来数据库还是要重新设计下,而且还是要学习自定义model,以及Qtableview界面重绘,比如高亮标题栏等。本次先做个小练习,掌握些界面属性设计及事件应用。
学习顺序总是先学会基本使用,然后找到原始控件的不足点,再去学灵活定制吧,我的周末过的好有成就感,通过模仿,距离我能制作专业工具又迈进一小步,哈哈~

上一篇下一篇

猜你喜欢

热点阅读