Sto tentando di creare un widget costituito da un'unica linea nera orizzontale. Questo widget verrà inserito in un QGridLayout in modo tale da occupare l'intera riga, agendo quindi come separatore. Poiché il widget su cui è installato il layout viene ridimensionato, mi piacerebbe che la linea cambiasse le sue dimensioni per tenere il passo. Ho esaminato un certo numero di opzioni, tra cui QLine, QGraphicsView e QImage, ma non riesco a ottenere il disegno della linea, non importa farlo ridimensionare.Disegno di una linea su QWidget
Sto implementando questo nella propria classe in modo da poterlo riutilizzare come e quando è necessario. Qualcuno può aiutarmi per favore con questo?
#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 questo caso, è il genitore parent
QWidget
su cui è installato il QGridLayout
accennato in precedenza.
#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
puoi mostrarci uno screenshot di quello che sembra finora? AFAIK, non penso che puoi fare in modo che un widget occupi più posizioni in un QGridLayout, un approccio migliore potrebbe essere quello di creare una linea orizzontale e inserirla in ogni colonna (stessa riga) – eqzx
Hai provato a utilizzare un QFrame con il frame forma impostata su HLine? –
@RA, è esattamente quello che stavo cercando, grazie :) Se lo scrivi come risposta, vado avanti e accetto. –