VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 555|回复: 4

Qt及Qt Quick开发实战精解项目二 items方法报错

[复制链接]
43_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-4 00:03:40 | 显示全部楼层 |阅读模式
3驿站币

void MyView::clearFullRows()
{
    // 获取比一行方格较大的矩形中包含的所有小方块
    for (int y = 429; y > 50; y -= 20) {
        QList<QGraphicsItem *> list = scene()->items(199, y, 202,22,Qt::ContainsItemShape,0);
        // 如果该行已满
        if (list.count() == 10) {
            foreach (QGraphicsItem *item, list) {
                OneBox *box = (OneBox*) item;
                box->deleteLater();
            }
            // 保存满行的位置
            rows << y;
        }
    }
......
}



Qt版本 是 5.6.1
以下是报错信息,无匹配的函数,我看了帮助文档是有的
E:\qt\myGame\myview.cpp:72: error: no matching function for call to 'QGraphicsScene::items(int, int&, int, int, Qt::ItemSelectionMode)'
         QList<QGraphicsItem *> list = scene()->items(199, y, 202,22,Qt::ContainsItemShape);
                                                                                          ^

帮助文档原型:
QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const





上一篇:vs2013编译问题
下一篇:请教一个低级问题,关于线程函数里使用无返回值的WaitForSingleObject的含义
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-4-4 00:24:22 | 显示全部楼层
很奇怪,暂时我也没看出什么问题。。。
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-4 10:12:00 | 显示全部楼层
可能与编译器有关。有的编译器忽略。
E:\qt\myGame\myview.cpp:72: error: no matching function for call to 'QGraphicsScene::items(int, int&, int, int, Qt::ItemSelectionMode)'
         QList<QGraphicsItem *> list = scene()->items(199, y, 202,22,Qt::ContainsItemShape);
                                                                                          ^
错误在y那里。仔细看y应该传引用ref,而实际传的值,编译器认为是
QGraphicsScene::items(int, int, int, int, Qt::ItemSelectionMode)而不是
QGraphicsScene::items(int, int&, int, int, Qt::ItemSelectionMode),故不匹配
这样试一下
    for (int y = 429; y > 50; y -= 20) {
        int&y1=y;
        QList<QGraphicsItem *> list = scene()->items(199, y1, 202,22,Qt::ContainsItemShape,0);
传引用是可以修改原值地。

Qt及Qt Quick开发实战精解项目二 items方法报错



43_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-4-4 20:49:55 | 显示全部楼层
xx_player 发表于 2019-4-4 10:12
可能与编译器有关。有的编译器忽略。
E:\qt\myGame\myview.cpp:72: error: no matching function for call ...

不行啊,还是显示无匹配函数
E:\qt\src\2\2-1\myGame\myview.cpp:74: error: no matching function for call to 'QGraphicsScene::items(int, int&, int, int, Qt::ItemSelectionMode)'
       list = scene()->items(199,y1,202,22,Qt::ContainsItemShape);
                                                                ^
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-6 15:22:55 | 显示全部楼层
       list = scene()->items(199,y1,202,22,Qt::ContainsItemShape);
                                                                ^
说明y参数已经蒙过去了,下面是Qt::ContainsItemShape不匹配。
根据QGraphicsScene::items(int, int&, int, int, Qt::ItemSelectionMode),
要求Qt::ContainsItemShape是Qt::ItemSelectionMode同类型变量。
确实不知道你的Qt::ContainsItemShape是不是Qt::ItemSelectionMode,
如应付编译可以再其前面加(Qt::ItemSelectionMode)强制转换,即
  list = scene()->items(199,y1,202,22,(Qt::ItemSelectionMode)Qt::ContainsItemShape);
看能不能骗过去编译器。如果骗过去,但运行错,就说明你的Qt::ContainsItemShape值是不能转换成Qt::ItemSelectionMode,
要按Qt::ItemSelectionMode定义变量,再传Qt::ItemSelectionMode参数 。
如果没错,就说明能转,大事化小。你遇到同类看着办。

Qt及Qt Quick开发实战精解项目二 items方法报错

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-29 23:56

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表