2012-06-19 17 views
8

पर एक रेखा खींचना मैं एक विजेट बनाने का प्रयास कर रहा हूं जिसमें एक क्षैतिज काला रेखा शामिल है। यह विजेट एक QGridLayout में रखा जाएगा जैसे कि यह पूरी पंक्ति लेता है, इस प्रकार एक विभाजक के रूप में कार्य करता है। जिस विजेट पर लेआउट स्थापित किया गया है उसका आकार बदल गया है, मैं चाहता हूं कि लाइन को आकार के आकार को बदलना पड़े। मैं QLine, QGraphicsView और QImage सहित विकल्प, की एक संख्या की जाँच की है, लेकिन मैं, रेखा तैयार की कभी नहीं मन आकार बदलने के लिए प्राप्त नहीं कर पा रहे।एक QWidget

मैं इसे अपनी कक्षा में कार्यान्वित कर रहा हूं, इसलिए जब मैं इसकी आवश्यकता हो और इसे पुन: उपयोग कर सकता हूं। क्या कोई इसके साथ मेरी मदद कर सकता है?

#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 माता पिता QWidget जिस पर QGridLayout पहले उल्लेख किया है स्थापित है।

#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

आप हमें क्या यह अब तक की तरह दिखता है का एक स्क्रीनशॉट दिखा सकते हैं? AFAIK, मुझे नहीं लगता कि आप एक बेहतर दृष्टिकोण एक क्षैतिज रेखा बनाने के लिए और (एक ही पंक्ति) प्रत्येक स्तंभ में यह डाल करने के लिए हो सकता है एक विजेट एक QGridLayout में कई स्थानों तक का समय लग बना सकते हैं – eqzx

+2

आप फ्रेम के साथ एक QFrame उपयोग करने की कोशिश है HLine करने के लिए सेट आकार? –

+0

@RA, कि मैं के लिए, धन्यवाद वास्तव में क्या देख रहा था है :) आप इसे में लिखना एक जवाब के रूप हैं, तो मैं आगे जाना है और स्वीकार करेंगे। –

उत्तर

10

क्यूटी में एक क्षैतिज रेखा बनाने के लिए सबसे आसान तरीका frameShape संपत्ति QFrame::HLine करने के लिए सेट के साथ एक QFrame उपयोग करने के लिए है। फिर आप इस फ्रेम को अपने ग्रिड लेआउट में उचित कॉलम अवधि के साथ रख सकते हैं। यहाँ एक सरल, काल्पनिक उदाहरण है:

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

यह सब कुछ आप यह स्वतः सहित आकार बदलने जब जनक लेआउट आकार बदलता है, करने के लिए क्या जरूरत है क्या करना चाहिए। आप वांछित रंग में दिखाने के लिए फ्रेम के पैलेट के साथ भी खेल सकते हैं।

1

आपने QPain टी ईवेंट गलत वर्तनी की। गलत वर्तनी मतलब है कि आपके paintEvent() फ़ंक्शन आधार वर्ग 'paintEvent पर हावी नहीं होता()।

क्योंकि आप कभी भी "QPainEvent" के चर ई का उपयोग नहीं करते हैं, वहां कोई वाक्यविन्यास त्रुटि नहीं है।

संबंधित मुद्दे