从'QTableWidgetItem* const'到'QChar'的转换..或问...模棱两可
conversion from 'QTableWidgetItem* const' to 'QChar' ..or QString...is ambiguous
我正在学习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();
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 将 NULL 转换为长不是模棱两可吗?
- 将一组类转换为类模板并避免构造函数模棱两可
- 转换和移动 ctor 导致对 Clang 和 GCC 4.9.2 的模棱两可的要求
- 转换是模棱两可的.标准隐式转换无法选择强制转换运算符
- 虚拟派生和转换模棱两可
- dynamic_cast中的模棱两可的转换
- 从'QTableWidgetItem* const'到'QChar'的转换..或问...模棱两可
- 处理模棱两可的类型转换/转换的正确方法是什么?