【发布时间】:2012-06-19 19:17:22
【问题描述】:
我正在尝试创建一个由一条水平黑线组成的小部件。这个小部件将被放置在 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 是安装了前面提到的QGridLayout 的父QWidget。
#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
【问题讨论】:
-
你能给我们看一张到目前为止的截图吗? AFAIK,我不认为你可以让一个小部件在 QGridLayout 中占据多个位置,更好的方法可能是制作一条水平线并将其放在每一列(同一行)
-
您是否尝试过使用框架形状设置为 HLine 的 QFrame?
-
@RA,这正是我想要的,谢谢 :) 如果你把它写成答案,我会继续接受。