0

この広く知られているコードを使用して、画像を Qt プッシュボタンに設定しようとしました。

QPixmap *pic = new QPixmap(":/images/logo.png");
QIcon *icon = new QIcon(*pic);
ui->pushButton->setIcon(*icon);
ui->pushButton->setIconSize(QSize(pic->width(), pic->height()));

ここに私のqrcファイルがあります

<RCC>
    <qresource prefix="/images">
        <file>images/logo.png</file>
    </qresource>
</RCC>

プログラムがコンパイルされても、常に実行時例外が発生します。

QPixmap *pic = new QPixmap(":/images/logo.png");

*pic を出力コンソールに出力しようとすると、 pic = QPixmap(QSize(0, 0) ) と表示されました。つまり、ヌルです。私がどこで間違ったのかについてのアイデアはありますか?

前もって感謝します!

4

4 に答える 4

3

そこでポインタを使用しないでください。

QPixmapオブジェクトを作成し、それを使用してオブジェクトを作成する必要さえありませんQIconQIcon には、ファイル名をパラメーターとして受け取るコンストラクターがあります。しかし、それはあなた次第です。リソースの場所も確認してください。あるべき姿に見える:/images/images/logo.png

QPixmap pix(":/images/images/logo.png");
QIcon icon(pix);
ui->pushButton->setIcon(icon);
ui->pushButton->setIconSize(pix.size())
于 2013-11-14T08:26:20.090 に答える
1

リソースは適切に初期化されていますか? あなたはこれを試すかもしれません:(ドキュメントから)

静的ライブラリにリソースがある場合、.qrc ファイルのベース名で Q_INIT_RESOURCE() を呼び出して、リソースの初期化を強制する必要がある場合があります。例えば:

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     Q_INIT_RESOURCE(graphlib);
     ...
     return app.exec();
 }

編集 より重要:

QPixmap は「画像」プレフィックスを前提としています。試すQPixmap(":/logo.png");

于 2013-11-14T08:19:43.437 に答える
1

私はあなたが電話するべきだと思います:

QPixmap *pic = new QPixmap(":/images/images/logo.png");

すでにプレフィックスを設定しているためです/images

于 2013-11-14T08:25:56.283 に答える