Ich versuche, ein Widget zu erstellen, das aus einer einzigen horizontalen schwarzen Linie besteht. Dieses Widget wird in einem QGridLayout platziert, sodass es die gesamte Zeile einnimmt und somit als Trennzeichen fungiert. Da das Widget, auf dem das Layout installiert wird, in der Größe angepasst wird, möchte ich, dass die Zeile ihre Größe ändert, um mitzuhalten. Ich habe eine Reihe von Optionen ausgecheckt, einschließlich QLine, QGraphicsView und QImage, aber ich kann nicht die Linie gezogen werden, geschweige denn die Größe ändern.Zeichnen einer Linie auf einem QWidget
Ich implementiere dies in seiner eigenen Klasse, so dass ich es wiederverwenden kann, wenn es benötigt wird. Kann mir bitte jemand dabei helfen?
#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 Mutter QWidget
, auf dem die QGridLayout
bereits erwähnt installiert ist.
#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 einen Screenshot zeigen, wie es bisher aussieht? AFAIK, ich glaube nicht, dass ein Widget mehrere Positionen in einem QGridLayout aufnehmen kann, ein besserer Ansatz wäre es, eine horizontale Linie zu erstellen und in jede Spalte zu setzen (gleiche Zeile) – eqzx
Haben Sie versucht, einen QFrame mit dem Rahmen zu verwenden Form auf HLine gesetzt? –
@RA, das ist genau das, was ich gesucht habe, danke :) Wenn Sie es als Antwort schreiben, werde ich weitermachen und akzeptieren. –