小编SRF*_*SRF的帖子

QTableView中标题单元格中的复选框

我希望有一个简单的列标题,其中包含一个复选框,用于选择/取消选择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)

c++ qt qt4

8
推荐指数
3
解决办法
8324
查看次数

raise(SIGABRT) 和 abort() 方法之间的区别

我知道raise(SIGABRT)abort()方法都会向自己发送一个 SIGABRT 信号。但是这两个功能之间存在一些差异。(例如 -abort()函数解除对 SIGABRT 信号的阻塞,而raise(SIGABRT)没有。)

raise(SIGABRT)abort()方法之间的其他区别是什么

c c++ posix sigabrt

7
推荐指数
1
解决办法
2222
查看次数

树视图的列数混淆

在以下示例中,每个子项只有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)

因此,子项的列号似乎受其父项的列号限制.这是标准行为吗?难道我做错了什么 ?

c++ qt

6
推荐指数
1
解决办法
1322
查看次数

从 Kubernetes 中的一组候选 Pod 中选出领导者的正确方法

为了执行领导者选举,Kubernetes 文档建议在候选 pod 集中部署一个边车。

https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/

这个边车遵循以下步骤来选举领导者。

  1. 如果不存在有效的领导者,则每个边车都会尝试以原子方式更新 Kubernetes 端点对象。只有一个边车可以成功更新端点对象。
  2. 更新端点的边车将在指定的时间段内担任领导者。
  3. 当前领导者将再次更新端点以延长持续时间以保留领导权。
  4. 当存在有效的领导者时,其他边车不会尝试再次更新端点。
  5. 如果当前leader在持续时间内没有更新endpoint,其他边车会认为leader被撤销。所有侧车都将进入步骤 1。

这种方法几乎没有问题。

  1. 可以在短时间内同时运行 2 个领导者。例子:

如果当前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)
  1. 该侧车的源代码已退役/存档。所以,它不是在积极发展。 https://github.com/kubernetes-retired/contrib/tree/master/election

那么,使用 Kubernetes 选举领导者的正确方法是什么?

kubernetes

5
推荐指数
1
解决办法
254
查看次数

标签 统计

c++ ×3

qt ×2

c ×1

kubernetes ×1

posix ×1

qt4 ×1

sigabrt ×1