【问题标题】:What is the easiest way to create a inherited class in Qt 5?在 Qt 5 中创建继承类的最简单方法是什么?
【发布时间】:2013-06-21 01:54:05
【问题描述】:

我是 Qt 新手,我想做的只是创建一个自定义的 QLineEdit 类,并进行一些自定义(默认对齐和默认文本)。现在我只是想建立一个基类,只继承QWidget。这就是我所拥有的(我知道非常糟糕的代码):

用户文本(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 来推广我的其他行编辑。

【问题讨论】:

  • 看起来你也是一个 C++ 新手。您不能在构造函数中定义函数。在尝试使用 Qt 之前,您真的应该从更简单的项目开始。如果您想创建“自定义 QLineEdit”,那么首先从 QLineEdit 继承。
  • 天哪,我是个白痴!我已经习惯了源文件中的类定义,就像在 C# 中一样,我只是假设它是一个类定义。我把我的函数放在构造函数之外,错误就被清除了。谢谢!不过有一个问题......如果我从 QLineEdit 继承,我是否也从 QWidget 继承?因为我想我尝试过仅从 QLineEdit 继承一次,而 SetGeometry 等函数不可用。我必须继承两者吗?
  • 不,您不能同时继承自 QWidget 和 QLineEdit(因为两者都间接继承自 QObject 并且您的类层次结构中不能有两次 QObject),无论如何请告诉我们更多关于您在尝试什么这样做,因为你描述的功能可以在不继承 QLineEdit 的情况下完成。

标签: c++ qt class inheritance


【解决方案1】:

QLineEdit 已经有可以设置的alignmentplaceholderText

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多