我正在尝试创建一个由单个水平黑线组成的小部件.此小部件将放置在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 );
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,parent是父QWidget在其QGridLayout前面提到的安装.
#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
Run Code Online (Sandbox Code Playgroud)
RA.*_*RA. 12
创建于Qt的一个水平线上的最简单方法是使用QFrame与frameShape属性设置为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);
Run Code Online (Sandbox Code Playgroud)
这应该完成您需要做的所有事情,包括在父布局调整大小时自动调整大小.您还可以使用框架的调色板以所需的颜色显示它.
| 归档时间: |
|
| 查看次数: |
12451 次 |
| 最近记录: |