3

QPixmap と QPainter を使用して簡単なアプリケーションを作成しています。私のプログラムでは、いくつかの画像をロードしてサイズを変更する必要があります。QPixmap::scaled() を使用しましたが、画像はスケーリングされません。私は何を間違えましたか?これは私のコードです:

チェススタイル.cpp

#include "chesstile.h"

ChessTile::ChessTile(QWidget *parent) :
    QLabel(parent)
{
}

void ChessTile::paintEvent(QPaintEvent *)
{
    const QString &fileName = "images/white_king.png";
    QPixmap bgPixmap(fileName);
    bgPixmap.scaled(QSize(64, 64));
    QPainter painter(this);
    painter.drawPixmap(0, 0, bgPixmap);
}

chesstile.h

#ifndef CHESSTILE_H
#define CHESSTILE_H

#include <QLabel>
#include <QString>
#include <QPainter>
#include <QPixmap>
#include <QSize>

class ChessTile : public QLabel
{
    Q_OBJECT
public:
    ChessTile(QString fileName,
              QString tileColor,
              QWidget *parent = 0);
    void paintEvent(QPaintEvent *);

private:

signals:

public slots:

};

#endif // CHESSTILE_H
4

1 に答える 1

9

ドキュメントからわかるように、QPixmap::scaledメンバー関数はconstオブジェクト自体を変更しません。

スケーリングされたオブジェクトはそのメソッドによって返され、元のピックスマップは変更されません。

次のようなものを試してください:

QPixmap bgPixmap(fileName);
QPixmap scaled = bgPixmap.scaled(QSize(64, 64));

QPainter painter(this);
painter.drawPixmap(0, 0, scaled)
于 2013-07-06T16:10:38.223 に答える