2013-06-21 4 views
0

저는 Qt 초보자이고 몇 가지 사용자 정의 (기본 정렬 및 기본 텍스트)를 사용하여 사용자 정의 QLineEdit 클래스를 작성하려고합니다. 지금은 QWidget 만 상속받은 기본 클래스를 만들려고하고 있습니다.Qt 5에서 상속 된 클래스를 만드는 가장 쉬운 방법은 무엇입니까?

userText (utxt.h) : 이것은 내가 (내가 아는 아주 나쁜 코드)가 무엇

#ifndef UTXT_H 
#define UTXT_H 

#include <QWidget> 
#include <QLineEdit> 

class utxt : public QWidget 

{ 
    Q_OBJECT 
public: 
    explicit utxt(QWidget *parent = 0); 

    QString text() const; 
    const QString displayText; 

    Qt::Alignment alignment; 
    void setAlignment(Qt::Alignment); 

signals: 

public slots: 

}; 

#endif // UTXT_H 

utxt.cpp :

#include "utxt.h" 

utxt::utxt(QWidget *parent) : 
    QWidget(parent) 
{ 
    QString utxt::text() 
    { 
     return this->displayText; 
    } 

    void utxt::setAlignment(Qt::Alignment align) 
    { 
     this->alignment = align; 
    } 
} 

나는이 정말 잘못 알고 utxt.cpp의 두 함수에서 "로컬 함수 정의가 잘못되었습니다."오류가 계속 발생합니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까? 나는 다른 라인 편집을 촉진하기 위해 커스텀 QLineEdit을 생성하려고하고있다. 미리 감사드립니다 !! 어떤 도움을 주셔서 감사합니다!

+4

당신은 C++ 초보자 인 것처럼 보입니다. 생성자 내에서 함수를 정의 할 수 없습니다. Qt로 작업하기 전에 간단한 프로젝트로 시작해야합니다. "커스텀 QLineEdit"을 만들고 싶다면 우선 QLineEdit에서 상속받습니다. –

+0

오 마이 갓, 나는 바보 야! C# 에서처럼 클래스 정의가 소스 파일에있는 데 익숙해졌습니다. 클래스 정의라고 가정했습니다. 내 함수를 생성자에서 제외하고 오류가 해결되었습니다. 감사! QLineEdit에서 상속 받으면 QWidget을 상속합니까? QLineEdit에서 한 번 상속 받았으며 SetGeometry 등의 함수를 사용할 수 없다고 생각하기 때문에. 나는 둘 다 상속해야합니까? – Nickersoft

+0

아니요, QWidget과 QLineEdit 모두에서 상속받을 수 없습니다 (QObject에서 간접적으로 상속되며 클래스 계층 구조에서 QObject를 두 번 사용할 수 없기 때문에). 어쨌든 당신이하려는 일에 대해 더 많이 알려줍니다. 기술은 QLineEdit을 상속받지 않고도 수행 할 수 있습니다. – Zlatomir

답변

0

QLineEdit에는 이미 alignment이 있고 placeholderText도 있습니다.

LE : QLineEdit (또는 QWidget)에서이 기능을 상속 할 필요가 없다고 말했지만, 정말로하고 싶다면 클래스를 만들고 원하는 매개 변수를 취하는 생성자를 코딩하면됩니다. QLineEdit의 기능을 다음과 같이 호출하십시오 :

//in the header 
//... i skipped the include guards and headers 
class utxt : public QLineEdit 
{ 
    Q_OBJECT 
public: 
//you can provide default values for all the parameters or hard code it into the calls made from the constructor's definition 
    utxt(const QString& defaultText = "test text", Qt::Alignment align = Qt::AlignRight, QWidget *parent = 0); 
}; 

//in the cpp 
utxt::utxt(const QString& defaultText, Qt::Alignment alignement, QWidget *parent) :  QLineEdit(parent) 
{ 
//call setPlaceHolder with a parameter or hard-code the default 
    setPlaceholderText(defaultText); 
//same with the default alignement 
    setAlignment(alignement); 
} 
관련 문제