0

これが私のコードです:

#include<QApplication>
#include<QWidget>
#include<QPaintEvent>
#include<QPainter>

int main(int argc,char**argv)
{
QApplication app(argc,argv);
QWidget*wid=new QWidget;
wid->setWindowTitle("sb");

QPainter paint;
paint.setWindow(0,0,900,900);
QRectF border(3*45-20,25,670,850);
QRectF inter(3*45,45,630,810);
paint.setPen(Qt::NoPen);
paint.setBrush(QBrush(Qt::darkMagenta,Qt::SolidPattern));
paint.drawRect(border);
paint.setBrush(QBrush(Qt::gray,Qt::SolidPattern));
paint.drawRect(inter);//
paint.setPen(QPen(Qt::darkGray,3,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
paint.setPen(Qt::NoPen);

paint.beginNativePainting();
wid->show();
return app.exec();
}

qmake -project、qmake、makeの後、次のように失敗します。

kl@kl-Latitude-D630:~/QTproj/t1$ ./t1 
QPainter::setWindow: Painter not active
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
QPainter::drawRects: Painter not active
QPainter::setBrush: Painter not active
QPainter::drawRects: Painter not active
QPainter::setPen: Painter not active
QPainter::setPen: Painter not active
QPainter::beginNativePainting: Painter not active

さて~~1つのcppファイルでのみQPainterをアクティブにする方法(paint.h、paint.cpp、main.cppなどの別々のファイルを使用したくありません。クラスを作成してクラスを作成すると、それを機能させることができます。 QWidgetですが、1つのファイルで機能させる方法を試してみたいです)?? どうもありがとう〜;-)

4

2 に答える 2

4

私は、エラーがここにあると思います:

QPainter paint;
paint.setWindow(0,0,900,900);

エラーは、ファイルを開く前にファイルを読み取ろうとするなど、ペイントする前にPainterをアクティブにしないことを示しています。あなたはペインターを初期化しましたが、どこにペイントするかを彼に伝えませんでした。ドキュメントを少し確認してください-http://harmattan-dev.nokia.com/docs/library/html/qt4/qpainter.html#QPainter

QPainter::begin ( QPaintDevice * device )後に追加するQPainter paint;か、その行を次のように変更しますQPainter::QPainter ( QPaintDevice * device )

例-QPainter p(img);この場合、imgはQImage*です。幸運を

于 2013-03-25T13:43:28.110 に答える
0

の関数QPainterでのみ使用できます。したがって、その関数を継承して実装する新しいクラスを作成します。QWidgetpaintEventQWidgetpaintEvent

于 2013-03-25T15:05:56.977 に答える