Próbuję utworzyć widget składający się z pojedynczej poziomej czarnej linii. Ten widget zostanie umieszczony w QGridLayout tak, że zajmie cały wiersz, działając w ten sposób jako separator. Ponieważ widget, na którym jest zainstalowany układ, jest zmieniany, chciałbym, aby linia zmieniła jego rozmiar, aby nadążyć. Sprawdziłem kilka opcji, w tym QLine, QGraphicsView i QImage, ale nie mogę uzyskać rysowania linii, nieważne, aby zmienić rozmiar.Rysowanie linii na QWidget
Wdrażam to w swojej własnej klasie, więc mogę go użyć ponownie, kiedy jest potrzebny. Czy ktoś może mi w tym pomóc?
#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);
}
W tym przypadku parent
jest rodzicem QWidget
na którym QGridLayout
wspomniano wcześniej jest zainstalowany.
#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
Czy możesz pokazać zrzut ekranu, jak to wygląda? AFAIK, nie sądzę, że możesz sprawić, że widget zajmie wiele lokalizacji w QGridLayout, lepszym rozwiązaniem może być utworzenie poziomej linii i umieszczenie jej w każdej kolumnie (ten sam wiersz). – eqzx
Czy próbowałeś używać QFrame z ramką? kształt ustawiony na HLine? –
@RA, to dokładnie to, czego szukałem, dzięki :) Jeśli napiszesz to jako odpowiedź, przyjdę i zaakceptuję. –