【问题标题】:Passing reference to QPixmap ctor传递对 QPixmap ctor 的引用
【发布时间】:2011-12-08 00:21:30
【问题描述】:

当我尝试传递似乎是对我的 QPixmap 的引用时,我收到一个错误:

 error: no matching function for call to ‘QGraphicsScene::addItem(QGraphicsPixmapItem (&)(QPixmap))’

问题是我不知道这个引用来自哪里,虽然我猜它来自迭代器。

void MainWindow::addItems(std::map<std::string, QString> * items)
{
    std::map<std::string, QString>::const_iterator current;

    for(current = items->begin(); current != items->end(); ++current)
    {
        QString cur = current->second;
        QGraphicsPixmapItem item(QPixmap(cur));
        _scene->addItem(item);

    }

}

如果是这样,有没有办法取消引用iterator?否则,我做错了什么?

调用它的代码

int main(int argc, char *argv[])
{
    std::map<std::string, QString> * items;

    items->insert(std::pair<std::string, QString>("ozone", ":/images/ozone_sprite.png"));

    QApplication a(argc, argv);
    MainWindow window;
    window.addItems(items);
    window.show();

    delete items;

    return a.exec();
}

【问题讨论】:

    标签: c++ qt pointers reference pass-by-reference


    【解决方案1】:

    您已经犯了所谓的 C++ 的“最令人烦恼的解析”。具体来说:

    QGraphicsPixmapItem item(QPixmap(cur));
    

    声明一个名为item 的函数,它接受QPixmap 类型的单个参数并返回QGraphicsPixmapItem。要解决此问题,请编写:

    QPixmap temp(cur);
    QGraphicsPixmapItem item(temp);
    

    看这里:

    http://en.wikipedia.org/wiki/Most_vexing_parse

    就错误而言,请注意您正在尝试使用 QGraphicsPixmapItem (&amp;)(QPixmap) 类型的参数调用 addItem - 也就是说,引用采用 QPixmap 并返回 QGraphicsPixmapItem 的函数(其中是表达式 item) 的类型。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 1970-01-01
      • 2019-03-30
      • 2016-06-06
      • 2013-06-16
      • 2016-03-24
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      相关资源
      最近更新 更多