Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: f0ker от Апрель 26, 2007, 13:13



Название: [QT 4.2.2] QTableWidget & SIGNAL itemChanged
Отправлено: 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. Все просто  :D


Название: Re: [QT 4.2.2] QTableWidget & SIGNAL itemChanged
Отправлено: AdAn от Ноябрь 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();


Название: Re: [QT 4.2.2] QTableWidget & SIGNAL itemChanged
Отправлено: AdAn от Ноябрь 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);
}
}