当前位置: 代码迷 >> QT开发 >> qt父子对象的有关问题请问
  详细解决方案

qt父子对象的有关问题请问

热度:223   发布时间:2016-04-25 03:02:06.0
qt父子对象的问题请教
Qt里子对象如何给父对象发送消息呢?
Qt里创建一个主widget,主widget的主要显示区由几个子widget在不同条件下交替显示,按下其中默认子widget上的按钮后,会弹出判断对话框,输入正确后将在主widget的主显示区显示另外一个子widget,问题来了,这个时候子widget可以关闭自己,但是怎么获取父widget的句柄或者指针呢?关掉自己也调不出需要显示的那个子widget啊?对c++和Qt还不熟悉,有人了解吗?

1,子widget的构造函数里传入了parent指针,这个时候子widget能通过这个指针访问父widget吗?
2,如果用信号与槽的话在父widget还是子widget里定义?

上面2种方法试了感觉都不行,c++基础薄弱,麻烦指点一下,剩余分不多了。。。
------解决思路----------------------
1,子widget的构造函数里传入了parent指针,这个时候子widget能通过这个指针访问父widget吗?
可以啊!没问题。举个简单例子:

QWidget *parentWidget = new QWidget(NULL);
QWidget *childWidget = new QWidget(parentWidget);

if ( childWidget->parent() )
{
    childWidget ->parent()->.......
     ......
}

再比如:自己的控件
MyMainWindow *mainWin = new.....;
MyDialog * dlg=new MyDialog(mainWin );

if (dlg->hasParent() )
{
    MyMainWindow *parentWin = static_cast<MyMainWindow *>(dlg->parent());
    parentWin->...
...
}

2,如果用信号与槽的话在父widget还是子widget里定义?
这个跟父子关系没啥关系,关键看哪个是发信号,哪个是接受信号。sender(signal),receiver(slot).

------解决思路----------------------
引用:
1,子widget的构造函数里传入了parent指针,这个时候子widget能通过这个指针访问父widget吗?
可以啊!没问题。举个简单例子:

QWidget *parentWidget = new QWidget(NULL);
QWidget *childWidget = new QWidget(parentWidget);

if ( childWidget->parent() )
{
    childWidget ->parent()->.......
     ......
}

再比如:自己的控件
MyMainWindow *mainWin = new.....;
MyDialog * dlg=new MyDialog(mainWin );

if (dlg->hasParent() )
{
    MyMainWindow *parentWin = static_cast<MyMainWindow *>(dlg->parent());
    parentWin->...
...
}

2,如果用信号与槽的话在父widget还是子widget里定义?
这个跟父子关系没啥关系,关键看哪个是发信号,哪个是接受信号。sender(signal),receiver(slot).
if ( childWidget->parent() )
{
    childWidget ->parent()->.......
     ......
}这个parent()是QObject对象,并不是QWidget *parentWidget,按照上面的方法访问parentWidget定义的函数,提示
: 错误:'class QObject' has no member named 'showt'
  相关解决方案