Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
459 / 357 / 69
Регистрация: 29.05.2018
Сообщений: 1,051
1

"Ложные" срабатывания слота изменения элемента QTreeWidget

22.08.2018, 15:30. Показов 648. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В ui формы есть виджет QTreeWidget treeWidget. Есть слот, реагирующий на изменение элемента. И есть чекбоксы каждого элемента, именно на которые и должен срабатывать слот. Но кроме этого при инициализации формы слот последовательно реагирует на настройки каждого элемента (setText, set...). Как этого избежать?
Вот код:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    QStringList  lst;
    lst << "Folders" << "Used Space";
    ui->treeWidget->setHeaderLabels(lst);
 
    ui->treeWidget->setSortingEnabled(false);
    ui->treeWidget->setSelectionMode(QAbstractItemView::NoSelection);
 
    QTreeWidgetItem* ptwgItem = new QTreeWidgetItem(ui->treeWidget);
    ptwgItem->setText(0, "Local Disk(C)");
    ptwgItem->setFlags(ptwgItem->flags() | Qt::ItemIsUserCheckable);
    ptwgItem->setCheckState(0, Qt::Checked);
 
    QTreeWidgetItem* ptwgItemDir = 0;
    for (int i = 1; i < 10; ++i) {
        ptwgItemDir = new QTreeWidgetItem(ptwgItem);
        ptwgItemDir->setText(0, "Directory" + QString::number(i));
        ptwgItemDir->setText(1, QString::number(i) + "MB");
        ptwgItemDir->setFlags(ptwgItemDir->flags() | Qt::ItemIsUserCheckable);
        ptwgItemDir->setCheckState(0, Qt::Checked);
    }
}
 
void Widget::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column)
{
    if(item->checkState(column) == Qt::Checked)
        QMessageBox::about(this, "State", "Checked");
    else
        QMessageBox::about(this, "State", "Unchecked");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2018, 15:30
Ответы с готовыми решениями:

Ложные срабатывания Антивирусов
Добрый день всем &quot;написал&quot; (По сути все решения взяты с данного сайта)программу. Определение...

NRF24L01+ ложные срабатывания
NRF24L01+ в составе китайского модуля. Настроен так: адрес 3-байтный, 2402 МГц, 1 Мбит/с, два пайпа...

Ложные срабатывания KIS на пустом месте
Приветствую всех. У меня очень редко, но возникает странная ситуация по подозрению на вирусы....

Ложные срабатывания системы защиты Windows 8 на приложение
Всех приветствую. Программа написанная на vb.net скомпилированная в exe иногда на win 8 при первом...

3
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.08.2018, 19:32 2
Цитата Сообщение от Ender Che Посмотреть сообщение
при инициализации формы слот последовательно реагирует на настройки каждого элемента (setText, set...). Как этого избежать?
Делать коннекты после инициализации формы.
2
459 / 357 / 69
Регистрация: 29.05.2018
Сообщений: 1,051
22.08.2018, 19:56  [ТС] 3
Цитата Сообщение от oxotnik Посмотреть сообщение
Делать коннекты после инициализации формы.
Спасибо! Всё получилось как надо.

Добавлено через 8 минут
Попутно ещё один вопрос: как при изменении состояния чекбокса корневого элемента перевести состояние чекбоксов дочерних элементов в то же состояние? Ясно, что при смене состояния надо пробежаться по дочерним элементам, только вот как это сделать?
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.08.2018, 20:44 4
Цитата Сообщение от Ender Che Посмотреть сообщение
надо пробежаться по дочерним элементам, только вот как это сделать?
C++ (Qt)
1
QTreeWidgetItem *QTreeWidgetItem::child(int index)
Рекурсивно от каждого родительского по всем дочерним и далее.
1
22.08.2018, 20:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2018, 20:44
Помогаю со студенческими работами здесь

Ложные срабатывания внешних прерываний на 2-м пине Ардуино
Всем привет! Поставил себе задачу - сделать часы на газоразрядных индикаторах ИН-12А на ардуино. В...

Ложные срабатывания антивирусных программ: как с этим жить?
Здравствуйте, ув. коллеги и посетители форума. Я тут новичок, поэтому возможно попал не в тот...

CLEAN MX - ложные срабатывания на наш сайт (как убрать сайт из их базы) ?
У нас есть сайт http://eclean24.ru/, он попал в базу CLEAN MX, как до них дописаться, и убрать сайт...

материнка Asus P4PE-X/TE - имеет 3 слота ddr, одновременно 3 слота не работают, только 2
Здравствуйте материнка Asus P4PE-X/TE - старенькая под pent4/celeron - socket478 - имеет 3 слота...

Нужен компьютер: 4 ядра,DD3 память,два слота для видеокарты и 4 слота для ОЗУ
Я хочу собрать комп. Чтобы Intel 4 ядра 3.0Ггц честота шины 1066.Мать подерживала DDR2 и DDR3,2...

Ложные посетители
Я когда то нашел такой сайт где пишешь адрес сайта и на сайте на счетчике показывается ложные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru