3

サブクラスを使用して、画像と数行を描画する必要がありますQGraphicsItem

ここに私のコード(ヘッダーファイル)があります-

#ifndef LED_H
#define LED_H

#include <QtGui>
#include <QGraphicsItem>

class LED : public QGraphicsItem
{
public:
    explicit LED();

    QRectF boundingRect() const;

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget);

private:
    static QPixmap *led_on; //<--Problem
};

#endif // LED_H

注 -LEDに追加されますQGraphicsScene

今、私はそれにアプローチする方法(QGraphicsItemを使用して画像を描画する)がわかりませんが、クラスstatic QPixmapのすべてのインスタンスによって共有されるを使用することにしました。LED

そして、cppファイルにこれを追加しました->

QPixmap* LED::led_on = new QPixmap(":/path");

しかし、ビルドと実行時にこのエラーが発生します-

QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Must construct a QApplication before a QPaintDevice
The program has unexpectedly finished.

やり方を教えてください。(私はQtが初めてです)QImage代わりにまたは何か他のものを使用する必要がありますか?

4

2 に答える 2

3

エラーが示唆するように、QApplication が作成された後に QPixmap を作成する必要があります。どうやらあなたがしたことは反対のことを引き起こします。この問題には多くの解決策がありますが、これはかなりクリーンです: QPixmap を初期化する LED クラスの静的メンバーを作成します。

void LED::initializePixmap() // static
{
    led_on = new QPixmap(":/path");
}

メイン関数を次のように設計します。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); // first construct the QApplication

    LED::initializePixmap(); // now it is safe to initialize the QPixmap

    MainWindow w; // or whatever you're using...
    w.show();

    return a.exec();
}
于 2012-11-05T19:15:47.580 に答える
1

これは問題です。qt の gui クラスには、次のような実行中の qapplication が必要なためです ...

main(int argc, char* argv[])
{
   QApplication a( argc, argv );

   // your gui class here

   return a.exec();
}

したがって、qt-gui クラスと、たとえば qgraphicsview を作成して表示する必要があります。

コンテンツを表示するためのグラフィックビューがある場合、表示するシーンが必要で、qgraphicsitem をシーンに追加します ...

于 2012-11-05T19:18:42.113 に答える