QAction *action=(QAction*)sender(); QMenu *m_pSetMenu_2=action->parent();
时间: 2024-03-14 21:47:33 浏览: 44
这个错误是因为 `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 类型的指针了。
相关问题
QAction *action = qobject_cast<QAction*>(sender()); QMenu *menu = qobject_cast<QMenu*>(action->parent()); QPushButton *button = qobject_cast<QPushButton*>(menu->parent());第三行崩溃
第三行崩溃可能是因为`menu`对象没有正确地获取到,导致无法获取到`button`对象。你可以在第二行代码后添加一些错误处理来排查问题。
以下是一个可能的解决方案:
```
QAction *action = qobject_cast<QAction*>(sender());
QMenu *menu = qobject_cast<QMenu*>(action->parent());
if (!menu) {
qDebug() << "Failed to cast parent of action to QMenu";
return;
}
QPushButton *button = qobject_cast<QPushButton*>(menu->parent());
if (!button) {
qDebug() << "Failed to cast parent of menu to QPushButton";
return;
}
```
这段代码会打印出错误信息并返回,帮助你确定问题所在。你可以根据输出的信息来进一步调试和解决问题。
QMenu *menu = action->parentWidget();在qt5用不了
在Qt5中,QAction类已经没有parentWidget()成员函数了,因此您需要使用QMenu的静态函数QMenu::parentWidget()来获取该动作所属的菜单,如下所示:
```
QMenu *menu = qobject_cast<QMenu*>(sender()->parentWidget());
```
请注意,这里使用了QObject::sender()函数来获取发送信号的对象,因此需要在发射信号时将该动作作为参数传递。
阅读全文