QAction *action = qobject_cast<QAction*>(sender()); QMenu *menu = qobject_cast<QMenu*>(action->parent()); QPushButton *button = qobject_cast<QPushButton*>(menu->parent());没有获取到menu对象
时间: 2024-02-05 20:11:09 浏览: 59
这段代码中,如果无法获取到menu对象,可能是由于action对象的父对象并非QMenu,或者QMenu的父对象并非QPushButton。
你可以尝试使用以下代码分别获取action、menu、button对象的父对象,看看是否符合预期:
```
QObject *actionParent = action->parent();
QObject *menuParent = menu->parent();
QObject *buttonParent = button->parent();
```
如果发现获取的父对象并非预期的类型,可能需要检查代码中对象的创建和添加顺序。
相关问题
QAction *action=(QAction*)sender(); QMenu *m_pSetMenu_2=action->parent();
这个错误是因为 `action->parent()` 返回的是一个 QObject 类型的指针,而你尝试将它转换为 QMenu 指针。这样的转换是不合法的,因为 QObject 类型和 QMenu 类型是不兼容的。
要解决这个问题,你需要使用 `qobject_cast` 函数来进行类型转换。`qobject_cast` 函数可以判断一个对象是否属于某个特定的类或其子类,如果是则返回相应类型的指针,否则返回空指针。
你可以将代码修改为以下形式:
```
QAction *action = qobject_cast<QAction*>(sender());
QMenu *m_pSetMenu_2 = qobject_cast<QMenu*>(action->parent());
```
这样就可以安全地将 QObject 类型的指针转换为 QMenu 类型的指针了。
QMenu *menu = action->parentWidget();在qt5用不了
在Qt5中,QAction类已经没有parentWidget()成员函数了,因此您需要使用QMenu的静态函数QMenu::parentWidget()来获取该动作所属的菜单,如下所示:
```
QMenu *menu = qobject_cast<QMenu*>(sender()->parentWidget());
```
请注意,这里使用了QObject::sender()函数来获取发送信号的对象,因此需要在发射信号时将该动作作为参数传递。
阅读全文