2016-05-10 3 views
0

Я работал над калькулятором Matrix в Qt и столкнулся с следующей проблемой. Я делаю это:C++ Qt - Установка значений элементов QTableWidget

void ShowMatrix::updateTable() 
{ 
    int w = 323 - 305; 
    int h = 300 - 227 + 15; 

    for(int i = 0; i < matrix->getRows(); i++) 
    { 
     ui->tableWidget->insertRow(i); 
     h += 35; 
    } 
    for(int j = 0; j < matrix->getColumns(); j++) 
    { 
     ui->tableWidget->insertColumn(j); 
     w += 50; 
    } 

    this->resize(w, h); 
    this->setMinimumSize(w, h); 

    ui->retranslateUi(this); 


    this->setWindowTitle(matrix->getName()); 
    emit updatingDone(); 

} 

И после этого при обновленииDone(); Сигнал испускается, этот слот запускается:

void ShowMatrix::setValues() 
{ 
    QString str; 
    for(int i = 0; i < matrix->getRows(); i++) 
     for(int j = 0; j < matrix->getColumns(); j++) 
     { 
      ui->tableWidget->item(i, j)->setText("1"); 
     } 
    ui->retranslateUi(this); 
} 

Я просто хочу установить все значения ячеек в единицы. Я не могу ничего делать с элементами, все, что я пытаюсь сделать с ними, например, установка флажков, значений и т. Д., Вызывает сбой моего приложения. если я не излучаю сигнал updatingDone(), все работает нормально.

ответ

1

Вы можете попробовать использовать этот слот:

void ShowMatrix::setValues() 
{ 
    QString str; 
    for(int i = 0; i < matrix->getRows(); i++) 
     for(int j = 0; j < matrix->getColumns(); j++) 
     { 
      QTableWidgetItem *item = ui->tableWidget->item(i, j); 
      if(!item) { 
       item = new QTableWidgetItem(); 
       ui->tableWidget->setItem(i, j, item); 
      } 
      item->setText("1"); 
     } 
    ui->retranslateUi(this); 
} 

Итак, когда вы добавляете новую строку и/или столбец таблицы виджета, добавленные клетки (s) по-прежнему нулевые. Поэтому вам нужно сначала поместить QTableWidgetItem в эти ячейки, используя QTableWidget-> setItem.

+0

Все строки и столбцы добавляются правильно. Я не использую rowcount, однако matrix-> getRows() не возвращает 0 точно. Откуда мне знать? Поскольку он корректно генерирует QTableWidget со всеми столбцами и строками, но они пусты. Если я прокомментирую эту строку: ui-> tableWidget-> item (i, j) -> setText ("1"); все работает отлично, но поля пустые. – MindRoller

+1

Так что игнорируйте updateTable выше и, пожалуйста, попробуйте мой слот – Apin

+0

Хорошо, я попробовал ваше решение, и оно работает, однако вы можете объяснить, почему? Как я уже сказал, строки и столбцы создавались должным образом, я просто не мог устанавливать значения. Я не понимаю, почему это так не работает – MindRoller