在qt中选择多个复选框

时间:2011-05-02 09:52:54

标签: qt

我在执行多项检查操作时遇到问题。基本上我做的是点击标记几个动作来调用markSeveral()然后从那里我调用list的clicked()信号来调用setcheckBoxes()然后设置复选框。现在问题是第一次完全qt发生,但是当我第二次这样做时,setcheckboxes()槽被调用两次,因此没有设置d复选框。再次进行第三次尝试时,setcheckboxes()槽被调用三次,但d复选框确实被设置。

为什么我只拨打一次电话时调用了这么多次?

请告诉我我做错了什么

提前致谢。这是我的代码片段:

void Browser::markSeveral()
{
    itemClicked=true;
    multiSelect=true;
    MarkClicked=true;
    MarkMenuClicked=true;

    connect(list,SIGNAL(clicked(QModelIndex)),this,SLOT(setCheckBoxes(QModelIndex)));
}

void Browser::setCheckBoxes(QModelIndex index)
{

    if(MarkClicked ==true && model->data(index,Qt::CheckStateRole) == Qt::Unchecked)
    {        
        model->setData(index,Qt::Checked,Qt::CheckStateRole);
        indexList.append(index);
    }
    else
    {
        if(MarkClicked ==true && model->data(index,Qt::CheckStateRole) == Qt::Checked)
        {
            model->setData(index,Qt::Unchecked,Qt::CheckStateRole);
            indexList.removeOne(index);
        }
    }


}

1 个答案:

答案 0 :(得分:3)

如果将信号连接到插槽n次,则发出一次信号将调用插槽n次。如果多次调用markSeveral(),则会有多个连接。

你应该只进行一次connect()调用,通常是在浏览器的ctor中。 或者通过使用Qt :: UniqueConnection:

确保只有一个连接
connect( list,SIGNAL(clicked(QModelIndex)),this,SLOT(setCheckBoxes(QModelIndex)), Qt::UniqueConnection );

这可确保只有一个连接。 以前的选项(在设置小部件时调用connect()一次)是首选。