Преобразование из "QTableWidgetItem * const" в "QChar".. или QString... неоднозначно

Я изучаю qt - и в книге C++ Программирование GUI с Qt 4 Я пытаюсь заставить весь код работать. У меня возникли проблемы с преобразованием выбора содержимого из пользовательского виджета таблицы в обычный текст.

существующий код в книге:

void MyTableWidget::mouseMoveEvent(QMouseEvent *event)
{
 if (event->buttons() & Qt::LeftButton) {
 int distance = (event->pos() - startPos).manhattanLength();
 if (distance >= QApplication::startDragDistance())
 performDrag();
 }
 QTableWidget::mouseMoveEvent(event);
}
void MyTableWidget::performDrag()
{
 QString plainText = selectionAsPlainText();
 if (plainText.isEmpty())
 return;

 QMimeData *mimeData = new QMimeData;
 mimeData->setText(plainText);
 mimeData->setHtml(toHtml(plainText));
 mimeData->setData("text/csv", toCsv(plainText).toUtf8());

 QDrag *drag = new QDrag(this);
 drag->setMimeData(mimeData);
 if (drag->exec(Qt::CopyAction | Qt::MoveAction) == Qt::MoveAction)
 deleteSelection();
}

Я пытаюсь написать selectionAsPlainText() и deleteSelection().

QTableWidgetSelectionRange MyTableWidget::selectedRange() const
{
 QList<qtablewidgetselectionrange> ranges = selectedRanges();
 if (ranges.isEmpty())
 return QTableWidgetSelectionRange();
 return ranges.first();
}

QString MyTableWidget::selectionAsPlainText()
{
 QTableWidgetSelectionRange range = selectedRange();
 QList<qtablewidgetitem *=""> items = selectedItems();
 QString str;

 for (int i=0;i<range.rowcount();i++){ for="" (int="" j="0;j<range.columnCount();j++){" error="" on="" this="" line="" str+="QString(items.at(i*(range.columnCount()-1)+j)-">data(Qt::DisplayRole)));


 if (j!= range.columnCount()-1)
 str += "\t";
 }
 str += "\n";
 }
 return str;
}
</range.rowcount();i++){></qtablewidgetitem></qtablewidgetselectionrange>

В этой попытке, из многих, я пытаюсь поместить элементы из QTableWidgetItem в QString, разделенные либо "\t" либо "\n".

Я не могу попробовать любой тип такого действия, потому что я получаю ошибки при попытке разместить любой контент в QString.

Все, что я пробовал до сих пор, дает мне ошибку, как

conversion from 'QTableWidgetItem* const' to 'QChar' is ambiguous
 or
error: no matching function for call to 'QString::QString(QVariant)'

Я не знаю, как сделать преобразование этого типа, я не видел примеров того, как указывать кастинг типов... Хотя, насколько я понимаю, выбирая Qt :: DisplayRole данных, я должен неявно иметь QString..,

Как я могу сделать это преобразование типа?

Я включил больше кода, чтобы предположить, что TableWidget скорее всего неизвестен.

1 ответ

Начнем с того, что сильно вложенные круглые скобки трудно читать. Я бы порекомендовал разбить линию нарушения на несколько строк. Во-вторых, тип, возвращаемый из QTableWidgetItem::data - это QVariant, который может быть преобразован в QString с использованием функции QVariant::toString(). Кроме того, я не думаю, что i*(range.columnCount()-1) - это то, что вы хотите.

Учитывая это, ваш код должен выглядеть примерно так:

int index = i*range.columnCount()+j;
QTableWidgetItem* item = items.at(index);
str += item->data(Qt::DisplayRole).toString();

licensed under cc by-sa 3.0 with attribution.