2012-06-19 10 views
8

Estoy intentando crear un widget que consta de una sola línea negra horizontal. Este widget se colocará en un QGridLayout de modo que ocupe toda la fila, actuando así como un separador. A medida que el widget sobre el que está instalado el diseño se redimensiona, me gustaría que la línea cambie su tamaño para mantener el ritmo. He comprobado una serie de opciones, incluidas QLine, QGraphicsView y QImage, pero parece que no puedo trazar la línea, no importa que cambie de tamaño.Trazar una línea en un QWidget

Estoy implementando esto en su propia clase para que pueda reutilizarlo cuando sea necesario. ¿Puede alguien ayudarme con esto?

#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); 
} 

En este caso, es el padre parentQWidget sobre la que se instala el QGridLayout se mencionó anteriormente.

#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 
+0

¿Puede mostrarnos una captura de pantalla de lo que parece hasta ahora? AFAIK, no creo que pueda hacer que un widget ocupe varias ubicaciones en un QGridLayout, un mejor enfoque podría ser hacer una línea horizontal y ponerla en cada columna (misma fila) – eqzx

+2

¿Ha intentado utilizar un QFrame con el marco? forma establecida en HLine? –

+0

@RA, eso es exactamente lo que estaba buscando, gracias :) Si lo escribe como respuesta, lo aceptaré. –

Respuesta

10

La forma más sencilla de crear una línea horizontal en Qt es utilizar un QFrame con la propiedad frameShape establecido en QFrame::HLine. A continuación, puede colocar este marco en el diseño de su cuadrícula con el tramo de columna adecuado. He aquí un ejemplo sencillo, artificiosa:

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); 

Esto debería hacer todo lo que necesita hacer para que, incluso cambiar el tamaño automáticamente cuando cambia el tamaño de la disposición de los padres. También puede jugar con la paleta del cuadro para mostrarlo en el color deseado.

1

Error de ortografía QPain t Evento. La falta de ortografía significa que su función paintEvent() no anula las clases base 'paintEvent()'.

Como nunca utiliza la variable e de "QPainEvent", no hay ningún error de sintaxis.

Cuestiones relacionadas