2012-06-19 22 views
8

Tek bir yatay siyah çizgiden oluşan bir pencere öğesi oluşturmaya çalışıyorum. Bu widget QGridLayout içine yerleştirilecek, böylece tüm satırın yerini alacak, böylelikle bir ayırıcı gibi davranacaktır. Düzenin yüklü olduğu pencere öğesi yeniden boyutlandırıldığında, çizginin devam etmesi için boyutunu değiştirmesini istiyorum. QLine, QGraphicsView ve QImage dahil olmak üzere bir dizi seçeneği kontrol ettim, ancak çizilen çizgiyi elde edemiyorum, yeniden boyutlandırmak için aldırmadım.QWidget üzerinde çizgi çizme

Bunu kendi sınıfında uygularım, böylece gerektiğinde ve gerektiği zaman yeniden kullanabilirim. Bununla ilgili biri bana yardım edebilir mi? Bu durumda

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

, parent önce belirtildiği QGridLayout kurulu olduğu ebeveyn QWidget olduğunu.

#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

Bize şu ana kadar neye benzediğini gösteren bir ekran görüntüsünü gösterebilir misiniz? AFAIK, bir widget'ın bir QGridLayout'ta birden fazla konum alabileceğini sanmıyorum, daha iyi bir yaklaşım yatay bir çizgi yapmak ve her bir sütuna koymak olabilir (aynı satır) – eqzx

+2

Çerçeveyle bir QFrame kullanmayı denediniz mi? şekil HLine olarak ayarlanmış mı? –

+0

@RA, tam da aradığım şey buydu, teşekkürler :) Cevap olarak yazarsak, devam edip kabul edeceğim. –

cevap

10

Qt yatay bir hat oluşturmak için en kolay yolu QFrame::HLine ayarlanmış frameShape özelliği ile bir QFrame kullanmaktır. Bu çerçeveyi, ızgara düzeninizde uygun sütun açıklığına yerleştirebilirsiniz. Burada basit, yapmacık örnek:

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

Bu da ebeveyn düzeni boyutlandırdığında boyutlandırmak otomatik dahil yapmak gereken her şeyi yapmalıdır. İstediğiniz renkte göstermek için çerçevenin paletiyle de oynayabilirsiniz.

1

QPain t olayını yanlış yazdınız. Yazım hatası, paintEvent() işlevinizin, base classes 'paintEvent() öğesini geçersiz kılmadığı anlamına gelir.

"QPainEvent" değişkenini hiçbir zaman kullanmazsanız, sözdizimi hatası yoktur.

İlgili konular