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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextDocument. Работа с ячейками таблицы  (Прочитано 2627 раз)
andrew.k
Гость
« : Сентябрь 12, 2014, 00:26 »

Сделал тестовый проект (во вложении).
Задача такая, при вводе в ячейку числа, нужно в соседней ячейке отобразить значение в текущей ячейке (если оно является числом), умноженное на два.
Число вставляется, но очищается так же текущая ячейка, не понимаю почему.

Кто разбирается в теме? В чем ошибка. Need assistance.
Записан
andrew.k
Гость
« Ответ #1 : Сентябрь 12, 2014, 00:31 »

Реализовано так:

Код
C++ (Qt)
   QTextCursor cursor = ui->textEdit->textCursor();
   QTextBlock block = cursor.block();
   bool ok;
   int number = block.text().toInt(&ok);
   qDebug() << "number" << number;
   if(ok)
   {
       ui->textEdit->blockSignals(true);
       cursor.movePosition(QTextCursor::NextCell);
       cursor.select(QTextCursor::BlockUnderCursor);
       cursor.removeSelectedText();
       cursor.insertText(QString().setNum(number * 2));
       ui->textEdit->blockSignals(false);
   }
 

Видимо весь вопрос в том, что я неверно выделяю ячейку.
Если заменить, на cursor.select(QTextCursor::WordUnderCursor);, то получается похожий функционал, но при условии, что в соседней ячейке будет только одно слово.
Как выделить целиком всю ячейку?
Записан
andrew.k
Гость
« Ответ #2 : Сентябрь 12, 2014, 01:00 »

Выделение  всей ячейки:


Код
C++ (Qt)
cursor.movePosition(QTextCursor::NextCell);
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);

Дополнительный вопрос на пятерку, как определить текущую позицию в таблице? То есть индекс колонки и строки.
Записан
andrew.k
Гость
« Ответ #3 : Сентябрь 12, 2014, 02:13 »

Решение задачи:

Код
C++ (Qt)
   QTextCursor cursor = ui->textEdit->textCursor();
   QTextTable *table = cursor.currentTable();
   if(table)
   {
       QTextTableCell tc = table->cellAt(cursor);
       if(tc.column() == 2)
       {
           QTextCursor cell = table->cellAt(tc.row(), 2).firstCursorPosition();
 
           bool ok;
           int number = cell.block().text().toInt(&ok);
           if(ok)
           {
               qDebug() << "our number:" << number;
               ui->textEdit->blockSignals(true);
               cell.movePosition(QTextCursor::NextCell);
               cell.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
               cell.removeSelectedText();
               cell.insertText(QString().setNum(number * 2));
               ui->textEdit->blockSignals(false);
           }
 
       }
   }
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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