第一次使用Qt:如何显示图像?

时间:2012-08-16 03:19:20

标签: c++ qt

Noob:如何显示图像 我对此非常陌生,实际上刚开始。我需要弄清楚如何在屏幕上显示图像。

首先我尝试了:

源代码:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    QPixmap qp = QPixmap("../images/tank2.bmp");
    if(qp.isNull())
    {
        printf("Yes its null\n");
    }
    else
    {
        QGraphicsPixmapItem item(QPixmap("../images/tank2.bmp"));
        scene.addItem(&item);
    }
    view.show();
    return a.exec();

}

从:

Qt jpg image display

它编译并运行但不显示图像。返回0,等等。

然后我只是从那里搞砸了。我也很好奇:在Qt编辑器中,它们显示了磁盘上不存在的文件结构。它们有文件“Headers”,“Sources”和Resources,而在系统上它只是一个文件夹“projectname”,其中包含一个文件夹中的所有文件。这只是为了视觉清晰度吗?

我正在使用的QtCreator版本是2.4.1运行Qt 4.7.4 64位。

我的最终目标是创建一个小部件,其中图片是一个可点击的图标,您可以在其中选择该图片并将其放置在更大的屏幕上,如瓷砖。

另一个问题:为什么Qt有像“QString”和“QChar”这样的东西?普通的c ++库有什么问题吗?

3 个答案:

答案 0 :(得分:5)

如果您只是想显示一个简单的图像,那么将Qlabel作为中心窗口小部件并调用setPixmap()将图像路径传递给它

  

“另一个问题:为什么Qt有像”QString“和”QChar“这样的东西?   普通的c ++库有什么问题吗?“

是的,普通库存在很多问题 - 至少对于std :: string 当Qt启动时,没有非常好的跨平台STL支持,标准库在Unicode上非常糟糕并且支持翻译。 QString做得非常好 - 尽管我认为现代STL和boost的组合可以完成QString可以做的所有事情。

几乎所有Qt类型都会自动引用计数,因此您几乎可以忽略它们的内存管理并自由传递它们。 Qt可以做一些技巧,因为额外的MOC编译通道意味着它具有类似Java的内省,而标准C ++则没有。

但一般来说,您可以自由使用标准C ++类型(Qt: Qt classes vs. standard C++

答案 1 :(得分:2)

我认为你的问题在这里:

{
    QGraphicsPixmapItem item(QPixmap("../images/tank2.bmp"));
    scene.addItem(&item); 
}

项目在您实际使用之前超出了范围。

我也很确定你的意思是使用之前在顶级范围加载的QPixmap。

一般来说,您希望将SO上的问题限制在一个问题上......但要解决您的上一个问题:QChar和QString允许Qt库对字符串做出若干假设。其中最明显的是QStrings具有标准化编码。

答案 2 :(得分:2)

像这样测试,它的工作原理。不要忘记创建qrc文件。

#include <QtGui/QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include "mainwindow.h"
#include <stdio.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    QPixmap qp = QPixmap(":/images/123.bmp");
    if(qp.isNull())
    {
        printf("Yes its null\n");
    }
    else
    {
        printf("HAHA");
        QGraphicsPixmapItem *item = new QGraphicsPixmapItem(QPixmap(":/images/123.bmp"));
        scene.addItem(item);
    }
    view.show();
    return a.exec();

}

这是qrc文件:

<RCC>
    <qresource prefix="/">
        <file>images/123.bmp</file>
    </qresource>
</RCC>

和.pro文件

QT       += core gui
TARGET = testimage
TEMPLATE = app
SOURCES += main.cpp
RESOURCES += 123.qrc