2011-11-26 37 views
12

私はQt開発が初めてであるため、私は設計が必要なユーザーインターフェイスのソリューションを研究しようとしています。私のプロジェクトは、グローバルマップの周りを移動するオンラインゲームでプレーヤーをシミュレートすることです。マップを表現するには、グリッド内の各領域がマップの領域を表す2次元グリッドを表示する必要があります。次に、各プレイヤーの位置をゲームに表示する必要があります。バックエンドは完全に機能し、マップは2D配列として実装されています。私はちょうどグリッドを表示する方法に立ち往生しています。Qt GUI開発 - QGraphicsViewを使用して2Dグリッドを表示する

私が行った研究は、QGraphicsViewがこれを行う最善の方法だと私に信じさせましたが、必要なものに関連するチュートリアルを見つけることができないようです。誰かがこれを実装する方法についてのヒントを持っている場合は、非常に感謝します。

ありがとう、Dan

+0

SDに同梱されているサンプルのQtグラフィックスについてK. [40000チップ](http://doc.qt.nokia.com/stable/demos-chip.html)は、巨大なシーンを表示するためのカスタムグラフィックスビューとグラフィックスアイテムを実装する良い例です。ソースコードを読むのはそれほど簡単ではありませんが、私はその主題に関してまともなチュートリアルを見つけられませんでした。 Btwでは、いくつかの[examples](http://doc.qt.nokia.com/stable/examples-graphicsview.html)が完全に文書化されており、最初は多くの役に立っています。 –

答えて

10

2Dグリッドは、水平線と垂直線のセットに過ぎません。 500x500の地図があり、両方向の線の間隔が50のグリッドを描画したいとします。次のサンプルコードは、どのように達成できるかを示しています。

// create a scene and add it your view 
QGraphicsScene* scene = new QGraphicsScene; 
ui->view->setScene(scene); 

// Add the vertical lines first, paint them red 
for (int x=0; x<=500; x+=50) 
    scene->addLine(x,0,x,500, QPen(Qt::red)); 

// Now add the horizontal lines, paint them green 
for (int y=0; y<=500; y+=50) 
    scene->addLine(0,y,500,y, QPen(Qt::green)); 

// Fit the view in the scene's bounding rect 
ui->view->fitInView(scene->itemsVBoundingRect()); 

あなたはQGraphicsViewQGraphicsSceneドキュメントならびに対応するexamplesをチェックする必要があります。また、Qtの開発日からグラフィック表示training videosまたは一部のグラフィック表示related videosを見ることができます。

3

グリッドサイズが一定の場合、またはグリッドサイズが限られている場合は、グリフブロックをgimpやその他のプログラムに描画し、それを背景ブラシとして設定しますブロックの右側)qtはイメージを繰り返し、フルグリッドを表示します。これはパフォーマンスにとっても良いと思います。

これは10x10ピクセルのプログラムで使用されているグリッドイメージです。

grid 10px

その後follwingとしてQGraphicsScene setBackgroundBrushを呼び出す:

scene->setBackgroundBrush(QBrush(QPixmap(":/grid/grid10.png"))); 
0

より多くのネイティブな方法はこれです:私は個人的に学んだPyQtはによって申し訳

scene = self.getScene()     # Your scene. 

brush = QBrush() 
brush.setColor(QColor('#999')) 
brush.setStyle(Qt.CrossPattern)   # Grid pattern. 
scene.setBackgroundBrush(brush) 

borderColor = Qt.black 
fillColor = QColor('#DDD') 
rect = QRectF(0.0, 0.0, 1280, 720)   # Screen res or whatever. 

scene.addRect(rect,borderColor,fillColor) # Rectangle for color. 
scene.addRect(rect,borderColor,brush)  # Rectangle for grid. 

...

+0

私はこの変換がC++での解決策を探している人には価値があると思います。しかし、一般的に質問に指定された言語に合った回答のみを投稿してください。ありがとうございました! –

関連する問題