Qt4父指针用法

时间:2010-02-18 19:48:17

标签: qt qt4 parent

我在理解QT4中parent指针的使用方面遇到了一些问题。

class firstClass : public QWidget
{
    Q_OBJECT

public:
     firstClass(QWidget *parent = 0);
    ~firstClass();

    void doSomething();

private:
    secondClass * myClass;
};

class secondClass : public QWidget
{
    Q_OBJECT

public:
    secondClass(QWidget *parent = 0);
    void doSomethingElse();
};

我想在运行doSomething()时调用doSomethingElse()方法。有没有办法使用parent指针?

我尝试了parent->doSomething(),但它不起作用。似乎Qt Creator仅在parent->之后建议来自QObject类的方法。

另一方面,我不能像secondClass(firstClass *parent = 0);那样写它 - compilator返回错误:

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

如果你肯定secondClass的父母总是firstClass,那么你可以这样做:

static_cast<firstClass *>(parent)->doSomething();

或者,您可以使用qobject_cast并检查以确保parent实际上是firstClass的实例:

firstClass *myParent = qobject_cast<firstClass *>(parent);
if(myParent){
    myParent->doSomething();
}

答案 1 :(得分:1)

更多Qt-ish方法是使用信号和插槽,而不是试图直接调用不同的函数。

class firstClass : public QWidget
{
    Q_OBJECT

public:
     firstClass(QWidget *parent = 0);
    ~firstClass();

public slot:
    void doSomething();

private:
    secondClass * myClass;
};

class secondClass : public QWidget
{
    Q_OBJECT

public:
    secondClass(QWidget *parent = 0);
    void doSomethingElse()
    {
        // ...
        emit ( triggerDoSomething() );
        // ...
    }

signal:
    void triggerDoSomething();
};

firstClass::firstClass(QWidget *parent) : 
    QWidget(parent), myClass(new secondClass(this))
{
    // ...
    bool connected = connect(myClass, SIGNAL(triggerDoSomething()),
        SLOT(doSomething()));
    assert( connected );
}