【问题标题】:How to declare and instantiate a variable in Qt?如何在 Qt 中声明和实例化一个变量?
【发布时间】:2011-08-31 09:12:27
【问题描述】:

起初我想为这个愚蠢的问题道歉,但我对 Qt 还很陌生,所以请原谅我 ;)

我正在画QPixmaps。但是对于性能问题,我只想加载我的QPixmaps 一次以一遍又一遍地使用它们。目前我总是在调用更新时加载它们,但应该可以在构造函数中只加载一次。在这种情况下,.h 文件和QPixmap 变量的声明会如何?暂时想不通。

【问题讨论】:

  • 你不能将它们加载到绘制它们的任何小部件的构造函数中吗?
  • 您可能想阅读一些关于 C++ 的介绍性书籍,问题不是 Qt 而是基本 C++ 知识
  • @Luc Touraille:这正是我想做的,但 David Rodriguez 正确提到的是,我不了解 C++ 基础知识。我想也许有人可以通过一个简单的例子来帮助我?

标签: c++ qt qpainter qpixmap


【解决方案1】:

Qt 是一个 C++ 库,所以你只需编写 C++ 代码:

标题:

class foo : public QWidget {
public:
    foo(QWidget *parent = 0);

private:
    QPixMap *bar;
};

来源:

foo::foo(QWidget *parent) : QWidget(parent) {
    bar = new QPixMap("bar.png");
    // Some error checking...
}

【讨论】:

  • 感谢您的回答。但是当我编译时,他在 update() 调用中的这一行向我抛出了一个错误:painter.drawPixmap(0,0, myPixmap);他说:“没有匹配函数调用 'QPainter::drawPixmap”
  • 请贴出整个错误信息,我认为问题可能是您对 drawPixmap 的参数类型错误。
  • 错误:没有匹配函数调用'QPainter::drawPixmap(int, int, QPixmap**)'
  • 对不起,错误:当我调用painter.drawPixmap(0,0, &myPixmap);如果我打电话给painter.drawPixmap(0,0, myPixmap);它抛出错误:没有匹配函数调用 'QPainter::drawPixmap(int, int, QPixmap*&)'
  • 当我调用painter.drawPixmap(0,0, *myPixmap);下次我会在用 c++ 编写之前回忆所有指针的东西
【解决方案2】:

您可能不需要优化图像加载:如果您通过将文件名参数传递给QPixmapQPixmap::load 的构造函数来加载它们,它们会自动缓存在QPixmapCache 中,如here 所述。

如果你真的想在你的类中保留QPixmap 作为成员,你不应该使用指针,因为基本上:

  • QPixmap 对象已经是智能指针,就像来自that list 的所有 Qt“隐式共享类型”,并且,
  • 原始指针是邪恶的,因为它们可能是无效的,需要手动删除。

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2014-01-06
    • 2012-11-28
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多