Zeichnen einer Linie auf einem QWidget
Ich versuche ein widget zu erstellen, das aus einer einzigen horizontalen schwarzen Linie. Dieses widget platziert werden soll in einem QGridLayout solche, die es dauert, bis die gesamte Zeile, also handeln als Trennzeichen. Als widget, auf dem das layout installiert ist, geändert wird, möchte ich die Zeile so ändern Sie die Größe zu halten. Ich habe überprüft eine Reihe von Optionen, einschließlich der QLine, QGraphicsView und QImage, aber ich kann nicht scheinen, um die Linie gezeichnet ist, geschweige denn es zu ändern.
Ich bin der Implementierung dieser in seiner eigenen Klasse, so kann ich es wiederverwenden, wie und Wann Sie gebraucht wird. Kann jemand mir bitte helfen mit diesem?
#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 );
}
In diesem Fall parent
ist die übergeordneteQWidget
auf denen die QGridLayout
bereits erwähnt ist installiert.
#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
- können Sie uns ein screenshot von dem, was es sieht aus wie bisher? AFAIK, ich glaube nicht, dass Sie machen können ein widget nehmen Sie mehrere Standorte in einem QGridLayout, ein besserer Ansatz sein könnte, um eine horizontale Zeile und in jede Spalte (gleiche Zeile)
- Haben Sie versucht, mit einer QFrame mit der Rahmenform festgelegt HLine?
- das ist genau das was ich gesucht habe, vielen Dank 🙂 Wenn Sie es schreiben als eine Antwort, ich werde weitermachen und akzeptieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg, um erstellen Sie eine horizontale Linie in der Qt ist die Verwendung eines
QFrame
mit derframeShape
- Eigenschaft aufQFrame::HLine
. Sie können diesen Rahmen in Ihrem grid-layout mit der entsprechenden Spalte erstrecken. Hier ist eine einfache, erfundene Beispiel:Diesem sollte alles tun, Sie müssen es tun, um, einschließlich automatisch ändern, wenn das übergeordnete layout ändert. Sie können auch spielen mit der Frames-palette, um es in der gewünschten Farbe.
Sie falsch QPaintVeranstaltung. Die mispelling bedeutet, dass Ihre paintEvent () - Funktion nicht überschreiben, die Basis-Klassen " paintEvent().
Weil Sie nie verwenden und die variable e der "QPainEvent", es gibt keine syntax-Fehler.