Russian Qt Forum
Ноябрь 26, 2024, 01:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget + checked  (Прочитано 3035 раз)
thechicho
Гость
« : Январь 06, 2012, 22:11 »

в таблице есть итемы с чекбоксом.
хотел добавить, чтобы они отмечались при нажатии на сам текст итема.

connect(ui->tableWidgetBeeline, SIGNAL(itemPressed(QTableWidgetItem*)), this, SLOT(checkedItem(QTableWidgetItem*)));

void Mobiler::checkedItem(QTableWidgetItem* item)
{
    if (item->checkState() == 0)
        item->setCheckState(Qt::Checked);
    else
        item->setCheckState(Qt::Unchecked);
}

но при таком раскладе, если нажимаю на сам чекбокс, то срабатывает коннект, т.е. допустим галочка ставится и одновременно срабатывает стандартный для чекбокса сигнал (или хз чо), т.е. галочка убирается.
как можно сделать, чтобы и при нажатии на текст итема, происходило изменение состояния, и при нажатии на сам чекбокс?
Записан
andrew.k
Гость
« Ответ #1 : Январь 07, 2012, 00:26 »

Что за манера менять стандартное поведение?

По щелчку айтем выделяется. Может использовать это?
Но опять же возникают вопросы, при нажатии например стрелок тоже будет меняться выделение. Подозреваю, что в этом случае уже не должен ставиться чекбокс по "задумке".

Можно еще посмотреть в сторону currentItem. Но наверное с ним ситуация будет схожа с выделением.

Видимо в итоге придется переопределять mousePressEvent и там смотреть куда тыкнул пользователь (itemAt) и решать надо ставить чекбокс или нет.
« Последнее редактирование: Январь 07, 2012, 00:27 от andrew.k » Записан
thechicho
Гость
« Ответ #2 : Январь 07, 2012, 17:37 »

// Что за манера менять стандартное поведение?
дак лучше же, когда на текст нажимаешь и чекбокс отмечается, чем выцеливать каждый раз его, чтобы отметить.
// По щелчку айтем выделяется. Может использовать это?
connect(ui->tableWidgetBeeline, SIGNAL(itemPressed(QTableWidgetItem*)), this, SLOT(checkedItem(QTableWidgetItem*)));
// Но опять же возникают вопросы, при нажатии например стрелок тоже будет меняться выделение
выделение тут не при делах. чекбоксы будут отмечаться только при нажатии (мышка || пробел)

короче, почитал setFlags()
выяснил, что на возможность отмечать чекбокс влияет флаг
Qt::ItemIsUserCheckable   16   It can be checked or unchecked by the user.
просто установил нужные флаги, без него.
таким образом, состояние меняется только в слоте, как мне и надо было *fuck yeah*

Код
C++ (Qt)
void Mobiler::checkItem(QTableWidgetItem* item)
{
   if (item->checkState() == 0 && item->column() == 0)
       item->setCheckState(Qt::Checked);
   else if (item->checkState() == 2 && item->column() == 0)
       item->setCheckState(Qt::Unchecked);
}
 
       for (int i = 0; i < phonesBeeline.count(); i++) {
           QTableWidgetItem *item = new QTableWidgetItem(phonesBeeline[i]);
           item->setCheckState(Qt::Checked);
           item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);
           itemsPhonesBeeline << item;
           ui->tableWidgetBeeline->setItem(i, 0, item);
 
           QTableWidgetItem *itemBalanse = new QTableWidgetItem;
           QTableWidgetItem *itemStatus = new QTableWidgetItem;
           itemBalanse->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
           itemStatus->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
           ui->tableWidgetBeeline->setItem(i, 1, itemBalanse);
           ui->tableWidgetBeeline->setItem(i, 2, itemStatus);
           itemsBalanseBeeline << itemBalanse;
           itemsStatusBeeline << itemStatus;
       }
« Последнее редактирование: Январь 08, 2012, 00:27 от thechicho » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 21.