从'QTableWidgetItem* const'到'QChar'的转换..或问...模棱两可

conversion from 'QTableWidgetItem* const' to 'QChar' ..or QString...is ambiguous

本文关键字:转换 模棱两可 QChar 或问 const QTableWidgetItem      更新时间:2023-10-16

我正在学习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;
}

在这个尝试中,在许多中,我试图将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可能是未知类型

首先,嵌套的括号很难阅读。我建议将这一行分成几行。其次,从QTableWidgetItem::data返回的类型是QVariant,可以使用QVariant::toString()成员函数将其转换为QString。另外,我不认为i*(range.columnCount()-1)是你想要的。

考虑到这一点,你的代码应该像下面这样:
int index = i*range.columnCount()+j;
QTableWidgetItem* item = items.at(index);
str += item->data(Qt::DisplayRole).toString();