在postgresql中生成自动ID(Generate auto ID in postgresql)
用户表:
ID Name 1 usr1 2 usr2 3 usr3
在上表中,ID是主键。 我的要求是在将数据插入表格时,我想只指定像
INSERT INTO user VALUES('usr4')
这样的名称。 执行查询后,有没有办法自动为'usr4'创建ID?我试过串行数据类型。 为此,我们还必须指定关键字default,如
INSERT INTO user VALUES(default,'usr4')
。 那么,有没有办法像INSERT INTO user VALUES('usr4')
。 注意:ID应该是唯一的。User Table:
ID Name 1 usr1 2 usr2 3 usr3
In the above table, ID is a primary key. My requirement is while inserting data into the table, I would like to specify only the name like
INSERT INTO user VALUES('usr4')
. After execute the query, Is there any way to automatically create ID for 'usr4'?I tried with serial data type. For that also we have to specify the keyword default like
INSERT INTO user VALUES(default,'usr4')
. So, is there any way to do likeINSERT INTO user VALUES('usr4')
. NOTE: ID should be unique.
原文:https://stackoverflow.com/questions/35763115
最满意答案
您的示例应该稍微调整一下以使用
QFileSystemModel
。诀窍是声明
checkedIndexes
设置为mutable
并在CFileSystemModel::data
方法中更新它。QVariant CFileSystemModel::data(const QModelIndex &index, int role) const { if(role == Qt::CheckStateRole) { if (checkedIndexes.contains(index)) { return checkedIndexes.contains(index) ? Qt::Checked : Qt::Unchecked; } else { int checked = Qt::Unchecked; QModelIndex parent = index.parent(); while (parent.isValid()) { if (checkedIndexes.contains(parent)) { checked = Qt::Checked; break; } parent = parent.parent(); } if (checked == Qt::Checked) { checkedIndexes.insert(parent); } return checked; } } else { return QFileSystemModel::data(index, role); } }
在视图中打开目录节点时,
QFileSystemModel
开始加载新内容。 加载后,视图使用CFileSystemModel::data
函数重新获取新数据,该函数检查是否检查了新节点的anchestors并返回正确的Qt::CheckStateRole
值(并且还更新了checkedIndexes
集)。Your example should be tweaked a bit to use
QFileSystemModel
.The trick is to declare the
checkedIndexes
set asmutable
and update it inside theCFileSystemModel::data
method.QVariant CFileSystemModel::data(const QModelIndex &index, int role) const { if(role == Qt::CheckStateRole) { if (checkedIndexes.contains(index)) { return checkedIndexes.contains(index) ? Qt::Checked : Qt::Unchecked; } else { int checked = Qt::Unchecked; QModelIndex parent = index.parent(); while (parent.isValid()) { if (checkedIndexes.contains(parent)) { checked = Qt::Checked; break; } parent = parent.parent(); } if (checked == Qt::Checked) { checkedIndexes.insert(parent); } return checked; } } else { return QFileSystemModel::data(index, role); } }
When you open a directory node in a view,
QFileSystemModel
starts to load new contents. After they are loaded, the view retieves new data usingCFileSystemModel::data
function, which checks if new nodes anchestors were checked and returns properQt::CheckStateRole
value (and also updates thecheckedIndexes
set).
相关问答
更多-
如何在 jQuery Mobile 的 Listview 中动态移除某一条的图标[2023-09-01]
checkbox -
在启动时使用QFileSystemModel滚动到QTreeView中的文件(ScrollTo a file in QTreeView with a QFileSystemModel on start-up)[2022-05-29]
我相信它可能与命令的顺序有关。 我订购如下 self.tree.scrollTo(index) self.tree.expand(index) self.tree.setCurrentIndex(index) 或者在你的代码中 ui.RootView->scrollTo(Model->index(LastUsedPath)); ui.RootView->expand(Model->index(LastUsedPath)); ui.RootView->setCurrentIndex(Model->index ... -
我收到了Qt邮件列表的回复,解释了这个问题: 我认为正在发生的事情是,只要您开始过滤,您用作根的索引不再存在。 该视图然后重置为无效索引作为根索引。 过滤在整个模型树上工作,而不仅仅是在您开始进入过滤器时看到的部分! 我想你将需要一个修改后的代理模型来做你想做的事情。 它应该只对你的根路径下的项目应用过滤,但是让根路径本身(以及其他任何东西)单独使用。 因此,在函数filterAcceptsRow()中检查子类化QSortFilterProxyModel和一些parent()后,它现在可以按预期工作! I ...
-
如何在QTreeView + QFileSystemModel上添加CheckBox(How to add CheckBox on QTreeView + QFileSystemModel)[2022-08-26]
您的示例应该稍微调整一下以使用QFileSystemModel 。 诀窍是声明checkedIndexes设置为mutable并在CFileSystemModel::data方法中更新它。 QVariant CFileSystemModel::data(const QModelIndex &index, int role) const { if(role == Qt::CheckStateRole) { if (checkedIndexes.contains(index)) ... -
坏消息,我担心:如果你想要那种行为,你将不得不自己实施。 文件系统读者只是没有设置为做这种事情。 这也是有原因的。 通常支持隐藏文件,因为它快速而简单 - 文件名与正则表达式匹配,或者不是。 隐藏目录(或使它们无法打开 - 相同的差异)是非常棘手的。 你不能只看目录名; 你必须抓取文件系统,寻找可打开的文件。 硬盘访问速度很慢 。 想象一下,您的用户正在查看非常接近文件系统根目录的目录 - 您必须抓取所有内容 。 然后,如果过滤器改变了,你必须再次完成所有操作。 还要考虑:已建立的模式是仅隐藏文件,而不是隐 ...
-
搜索索引是我目前最大的问题 而索引只是模型中项目的“指针”。 你不能“搜索”它,因为索引中没有任何内容。 它只是指向一个项目的指针。 您应该搜索模型 。 index(const QString & path)方法适合您。 给定一个路径,它会在路径末尾的元素中返回一个索引。 然后,您可以向上迭代以扩展项目: // ...because QModelIndex::operator= doesn't exist QModelIndex & assign(QModelIndex & dst, const QMode ...
-
如何在QTreeView中获取当前所选项的绝对路径(How to Get Absolute Path of Currently Selected Item in QTreeView)[2022-09-08]
使用view->selectionModel()->selectedIndexes()获取所选索引,使用fileSystemModel->filePath()获取这些索引的路径。 Use view->selectionModel()->selectedIndexes() to obtain selected indexes and fileSystemModel->filePath() to get path for these indexes. -
QTreeView* treeView = new QTreeView(centralWidget()); QFileSystemModel* fsModel = new QFileSystemModel(treeView); fsModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs); fsModel->setRootPath("/home/user"); treeView->setModel(fsModel); // first column is ...
-
使用QSortFilterProxyModel在QTreeView中自动选择文件(Auto selecting files in QTreeView with QSortFilterProxyModel)[2023-05-21]
QFileSystem提供在QSortFilterProxy对项目进行排序后发出的layoutChanged信号。 QFileSystem offers the layoutChanged signal that is emitted after QSortFilterProxy sorts the items. -
如何在添加/删除驱动器时更新QFileSystemModel?(how to update QFileSystemModel when drive is added/removed?)[2023-05-16]
问题是该模型不是在观察fs变化而是没有更新。 而且你希望它能够在更高的层次上进行控制。 因此,如果您将根路径设置为我的计算机,它应该工作: QString rPath = fileSystemModel->myComputer().toString(); fileSystemModel->setRootPath(rPath); 这是一个类似的问题(更改过滤器没有更新模型)这样解决了。 此外,您不必在每次更改时调整表的大小。 只需更改调整大小模式: void QHeaderView::setSection ...