выбор нескольких флажков в qt - PullRequest
0 голосов
/ 02 мая 2011

У меня проблема с выполнением нескольких операций проверки.По сути, я нажимаю на действие mark несколько, чтобы вызвать markSeveral (), а затем оттуда вызываю clicked () сигнал списка, чтобы вызвать setcheckBoxes (), а затем устанавливаю флажки.теперь провал совершенно не выполняется в первый раз, но когда я делаю это во второй раз, слот 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 Ответ

3 голосов
/ 02 мая 2011

Если вы подключите сигнал к слоту n раз, то, если сигнал будет один раз, вызовется слот n раз. Если вы вызываете markSeveral () несколько раз, у вас есть несколько соединений.

Вы должны выполнить вызов connect () только один раз, обычно в ctor в браузере. Или убедитесь, что есть только одно соединение, используя Qt :: UniqueConnection:

connect( list,SIGNAL(clicked(QModelIndex)),this,SLOT(setCheckBoxes(QModelIndex)), Qt::UniqueConnection );

Это гарантирует, что существует только одно соединение. Первый вариант (вызов connect () один раз при настройке виджета) предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...