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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QT 4.2.2] QTableWidget & SIGNAL itemChanged  (Прочитано 5729 раз)
f0ker
Гость
« : Апрель 26, 2007, 13:13 »

У меня есть таблица QTableWidget в нее делегированы QComboBox. Мне надо при определенных значениях в одном ComboBox'e делать другую ячейку не редактируемой, т.е. делать

Код:
item->setFlags(item->flags() & ~Qt::ItemIsEditable);


В версии 4.1.4 это прокатывало, но в версии 4.2.x на изменение флага тоже стало срабатывать событие itemChanged. В результате приложение падает. Подскажите как обойти это?

добавлено спустя 6 часов 51 минуту:

 Пока ждал, ответ сам разобрался. Оказывается надо просто временно делать disconnect, а после всех изменений опять connect. Все просто  Веселый
Записан
AdAn
Гость
« Ответ #1 : Ноябрь 03, 2014, 08:49 »

ТЕма вроде хоть и давно открыта, но название темы подходящее, поэтому не стал открывать новую тему.

Проблема вот в чем - хочу передать значение из ячейки в tableWidget на label

сигнал на коннект:
Код:
connect(ui->tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(changeItem()));

код слота:
Код:
void My::changeItem(){
    
    [b]QString NameItem = ui->tableWidget->item(ui->tableWidget->currentIndex().row(),ui->tableWidget->currentIndex().column())->text();[/b]
    ui->label->setText(NameItem);
}

Программа вылетает и выдает ошибку сигментации. Понимаю, что ошибка кроется в выделенной строчке в слоте, но не понимаю как исправить...
    QString NameItem = ui->tableWidget->item(ui->tableWidget->currentIndex().row(),ui->tableWidget->currentIndex().column())->text();
Записан
AdAn
Гость
« Ответ #2 : Ноябрь 03, 2014, 13:17 »

Решил таким образом, не знаю на долго ли) но работает.
Код:
void My::changeItem(){
   
    if (ui->tableWidget->currentIndex().row() >= 0){
    QString NameItem = ui->tableWidget->item(ui->tableWidget->currentIndex().row(),ui->tableWidget->currentIndex().column())->text();
    ui->label->setText(NameItem);
}
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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