我希望有一个简单的列标题,其中包含一个复选框,用于选择/取消选择QTableView中的所有行.单击标题中的复选框会导致选择或取消选择所有行.
当我想在表格单元格中添加一个复选框时,我必须在数据(..)中返回Qt :: CheckStateRole的检查状态,以获得所需的模型索引,如下所示.这是按预期工作的.
QVariant MyModel::data( const QModelIndex & rIndex, int iRole) const
{
...
if (iRole == Qt::Qt::CheckStateRole)
{
return checkstate;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我想在标题单元格中添加一个复选框时,上述方法无效.听到我的示例代码.
QVariant MyModel::headerData( int iSection, Qt::Orientation eOrientation, int iRole) const
{
...
if (iRole == Qt::CheckStateRole)
{
return checkstate;
}
}
Run Code Online (Sandbox Code Playgroud)
QTableView不使用Qt :: CheckStateRole调用我的模型中的headerData()函数,就像使用data()函数一样.
为什么会这样?如何通过仅修改自定义表模型在标题单元格中插入复选框?
(我不想为此目的创建自定义QTableView或QHeaderView)
我知道raise(SIGABRT)
和abort()
方法都会向自己发送一个 SIGABRT 信号。但是这两个功能之间存在一些差异。(例如 -abort()
函数解除对 SIGABRT 信号的阻塞,而raise(SIGABRT)
没有。)
raise(SIGABRT)
和abort()
方法之间的其他区别是什么
在以下示例中,每个子项只有1列,尽管它应该有2列.
(MyTreeModel是QAbstractItemModel的子类.)
int MyTreeModel::columnCount( const QModelIndex &rParent /*= QModelIndex()*/ ) const
{
if (rParent.isValid())
{
return 2;
}
else
{
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
在以下示例中,QTreeView按预期显示父项的2列和子项的1列.
int MyTreeModel::columnCount( const QModelIndex &rParent /*= QModelIndex()*/ ) const
{
if (rParent.isValid())
{
return 1;
}
else
{
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,子项的列号似乎受其父项的列号限制.这是标准行为吗?难道我做错了什么 ?
为了执行领导者选举,Kubernetes 文档建议在候选 pod 集中部署一个边车。
https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/
这个边车遵循以下步骤来选举领导者。
这种方法几乎没有问题。
如果当前leader挂了,不能及时更新endpoint,另一边的一辆汽车将获得leader。但前任领导人需要一段时间才能意识到其领导地位被撤销。在这段短暂的时间内,现有的 2 个领导者可以破坏共享资源/数据。
其源代码中也提到了这一点。
This implementation does not guarantee that only one client is acting as a leader (a.k.a. fencing).
Run Code Online (Sandbox Code Playgroud)
那么,使用 Kubernetes 选举领导者的正确方法是什么?