9

単一の水平の黒い線で構成されるウィジェットを作成しようとしています。このウィジェットは、行全体を占めるように QGridLayout に配置され、セパレータとして機能します。レイアウトがインストールされているウィジェットのサイズが変更されるので、それに合わせてラインのサイズを変更したいと思います。QLine、QGraphicsView、QImage など、いくつかのオプションをチェックアウトしましたが、線を描画できないようです。サイズを変更してもかまいません。

これを独自のクラスに実装しているので、必要に応じて再利用できます。誰でもこれで私を助けてもらえますか?

#include "startMenuSectionFooter.h"

#include <QtGui>

StartMenuSectionFooter::StartMenuSectionFooter( QWidget *parent )
  : QWidget( parent )
{
  layout = new QHBoxLayout( this );
}

void StartMenuSectionFooter::paintEvent( QPainEvent *e )
{
  QPointF p1 = QPointF( parentWidget()->height(), 0 );
  QPointF p2 = QPointF( parentWidget()->height(), parentWidget()->width() );

  QPainter painter( this );
  painter.setRenderHint( QPainter::Antialiasing, true );
  painter.setPen( QPen( Qt::black, 10 ) );

  painter.drawLine( p1, p2 );
}

この場合は、前述の がインストールされてparentいる親です。QWidgetQGridLayout

#ifndef START_MENU_SECTION_FOOTER_H
#define START_MENU_SECTION_FOOTER_H

#include <QWidget>

class QHBoxLayout;
class QPainEvent;

class StartMenuSectionFooter : public QWidget
{
  Q_OBJECT

  QBHoxLayout *layout;

  void paintEvent( QPainEvent *e );

public:
  StartMenuSectionFooter( QWidget *parent = NULL );
};

#endif
4

2 に答える 2

12

Qt で水平線を作成する最も簡単な方法はQFrameframeShapeプロパティを に設定してa を使用することQFrame::HLineです。次に、このフレームを適切な列スパンでグリッド レイアウトに配置できます。以下は、単純で不自然な例です。

QFrame* myFrame = new QFrame();
myFrame->setFrameShape(QFrame::HLine);

const int NUMBER_OF_COLUMNS_IN_GRID = 4;
myGridLayout->addWidget(myFrame, 0, 0, 1, NUMBER_OF_COLUMNS_IN_GRID);

これにより、親レイアウトのサイズが変更されたときに自動的にサイズが変更されるなど、必要なすべてのことが行われます。フレームのパレットを操作して、希望の色で表示することもできます。

于 2012-06-19T19:31:36.587 に答える
1

QPain t Event のスペルが間違っています。スペルミスは、paintEvent() 関数が基本クラスの paintEvent() をオーバーライドしないことを意味します。

「QPainEvent」の変数 e を使用することはないため、構文エラーはありません。

于 2016-03-01T03:53:47.313 に答える