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エディターでは、ディスク上に存在しないファイル構造が表示されます. それらにはファイル「ヘッダー」、「ソース」、およびリソースがありますが、システムでは、すべてのファイルが1つのフォルダーにあるフォルダー「プロジェクト名」だけです。これは視覚的な明瞭さのためだけですか?

私が使用している QtCreator のバージョンは、Qt 4.7.4 64 ビットを実行する 2.4.1 です。

私の最終的な目標は、画像がクリック可能なアイコンであり、その画像を選択して、タイルのように大きな画面に配置できるウィジェットを作成することです。

別の質問: Qt に "QString" や "QChar" などがあるのはなぜですか? 通常の C++ ライブラリに何か問題がありますか?

4

3 に答える 3

5

単純な画像を表示したいだけの場合は、Qlabelを中央ウィジェットにして、setPixmap()を呼び出して画像パスを渡します。

「別の質問:Qtに「QString」や「QChar」などがあるのはなぜですか?通常のc ++ライブラリに何か問題がありますか?」

はい、通常のライブラリには多くの問題があります-少なくともstd::stringについては。
Qtが開始されたとき、クロスプラットフォームのSTLサポートはあまり良くなく、標準ライブラリはUnicodeと翻訳のサポートが非常に悪かった。QStringはこれを非常にうまくやっています-現代のSTLとブーストの組み合わせはおそらくQStringができることすべてを行うことができると思います。

ほとんどすべてのQtタイプは自動的に参照カウントされるため、それらのメモリ管理をほとんど無視して、自由に渡すことができます。Qtが実行できるトリックもいくつかあります。これは、追加のMOCコンパイルパスが、標準のC++にはないJavaのようなイントロスペクションを備えていることを意味するためです。

ただし、一般的には、標準のC ++タイプを自由に使用できます(Qt:Qtクラスと標準のC ++

于 2012-08-16T03:44:42.553 に答える
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 に答える
2

あなたの問題はここにあると思います:

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

アイテムは、実際に使用する前に範囲外になります。

また、トップレベルのスコープで以前にロードした QPixmap を使用することを意味していたと確信しています。

一般的に言えば、SO に関する質問を 1 つの質問に限定したいのですが、最後の質問に対処するには、QChar と QString を使用すると、Qt ライブラリで文字列に関するいくつかの仮定を行うことができます。最も明白なのは、QStrings が標準化されたエンコーディングを持っていることです。

于 2012-08-16T03:31:48.390 に答える