2

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图片显示

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

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

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

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

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

4

3 回答 3

5

如果您只想显示一个简单的图像,则将 Qlabel 作为中央小部件并调用setPixmap()将其传递给您的图像路径

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

是的,普通库有很多问题——至少对于 std::string 而言。
当 Qt 开始时,跨平台 STL 支持不是很好,标准库在 Unicode 和对翻译的支持方面非常糟糕。QString 做得很好——尽管我认为现代 STL 和 boost 的组合可能可以完成 QString 可以做的所有事情。

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

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

于 2012-08-16T03:44:42.553 回答
2

我认为你的问题在这里:

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

item 在您实际使用它之前就超出了范围。

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

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

于 2012-08-16T03:31:48.390 回答
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
于 2012-08-16T03:46:24.933 回答