CÃlimos 2024-03-13 10:44 采纳率: 64.4%
浏览 48
已结题

qt 报错无法将参数QModelIndex转换成QModelIndex

//鼠标悬浮显示文字功能
              ui->tablehistory->setMouseTracking(true);
              connect(ui->tablehistory, SIGNAL(entered(QModelIndex)), this, SLOT(ShowTooltip(QModelIndex)));

void qthalconmw::ShowTooltip(QModelIndex index)
{
    QToolTip::showText(QCursor::pos(),index.data().toString());
    return ;
}

然后再moc.qthalconm的这一行里报错:无法将参数QModelIndex转换成QModelIndex

  case 15: _t->ShowTooltip((*reinterpret_cast< QModelIndex(*)>(_a[1]))); break;

求解为啥会报错

  • 写回答

2条回答 默认 最新

  • 关注

    CÃlimos 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    这个问题可能是由于Qt的信号和槽机制的参数不匹配导致的。在连接信号和槽时,参数类型必须完全匹配,包括const和非const限定符。在你的代码中,entered(QModelIndex)信号发送的是一个非const的QModelIndex对象,而ShowTooltip(QModelIndex)槽函数接受的是一个const的QModelIndex对象。

    要解决这个问题,你可以进行以下操作:

    1. 修改ShowTooltip槽函数的参数为const类型:
    void qthalconmw::ShowTooltip(const QModelIndex& index)
    {
        QToolTip::showText(QCursor::pos(), index.data().toString());
        return ;
    }
    
    1. 修改连接信号和槽的代码,使用const_cast来消除const限定符:
    connect(ui->tablehistory, SIGNAL(entered(const QModelIndex)), this, SLOT(ShowTooltip(const_cast<QModelIndex&>(index))));
    

    这样就可以消除这个报错了。注意,在使用const_cast时要小心,确保不会修改对象的实际值。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 创建了问题 3月13日