我在理解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返回错误:
感谢您的任何建议。
答案 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 );
}