首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将“QTableWidgetItem*const”转换为“QChar”..or QString...is歧义

将“QTableWidgetItem*const”转换为“QChar”..or QString...is歧义
EN

Stack Overflow用户
提问于 2014-08-11 22:36:58
回答 1查看 1.8K关注 0票数 1

我正在学习qt --在书中,使用Qt4进行C++图形用户界面编程,我试图让所有的代码都能工作。在将选择的内容从自定义表小部件转换为纯文本时,我遇到了问题。

这本书中的现有代码:

代码语言:javascript
复制
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()。

代码语言:javascript
复制
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中时会出现错误。

到目前为止,我所做的一切都给了我一个错误,就像

代码语言:javascript
复制
conversion from 'QTableWidgetItem* const' to 'QChar' is ambiguous
 or
error: no matching function for call to 'QString::QString(QVariant)'

我不知道如何进行这种类型转换,我还没有见过关于如何指定类型转换的示例.虽然据我所知,选择数据的Qt::DisplayRole,但我应该隐式地拥有一个QString.

如何使这种类型转换工作?

我增加了更多的代码,表明TableWidget可能是未知类型的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-11 23:44:00

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

鉴于此,您的代码应该如下所示:

代码语言:javascript
复制
int index = i*range.columnCount()+j;
QTableWidgetItem* item = items.at(index);
str += item->data(Qt::DisplayRole).toString();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25253534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档