gpt4 book ai didi

c++ - 从 'QTableWidgetItem* const' 到 'QChar' 的转换......或者 QString......是不明确的

转载 作者:行者123 更新时间:2023-11-28 06:44:31 25 4
gpt4 key购买 nike

我正在研究 qt - 在《C++ GUI Programming With 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::将其转换为 QString toString() 成员函数。另外,我认为 i*(range.columnCount()-1) 不是您想要的。

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

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

关于c++ - 从 'QTableWidgetItem* const' 到 'QChar' 的转换......或者 QString......是不明确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com