如图所示 如果我点击 队员1 或队长1 以后 应该如何 获取 选中的菜单项的 二级 三级 菜单名呢
应该是可以通过sender()和parent()函数来获取点击的菜单的上一级菜单,但是好像没法继续往上查找。
建议建立一个映射关系:
QMap<QString,QStringList > mapMenu;
键:QString类型,菜单的的文本内容
值:QStringList类型,存储当前菜单项的所有下一级菜单。
当点击一个菜单时,在响应函数里,根据点击菜单的文本,遍历mapMenu,查找其所对应的父菜单即可,查到父菜单后,可以继续查询父菜单的父菜单。
void stringToBinary(QString str)
{
int bKey[64]; // 二进制
for (int i = 0; i < 8; ++i)
{
int t[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int k = str.at(i).unicode();
qDebug() << Q_FUNC_INFO << __LINE__ << "k:" << k;
for (int j = 0; k != 0; ++j)
{
t[j] = k % 2;
k = k / 2;
}
for (int j = 0; j < 8; ++j)
{
bKey[i * 8 + j] = t[7 - j];
qDebug() << Q_FUNC_INFO << __LINE__ << i * 8 + j << "="<<bKey[i * 8 + j];
}
}
#ifndef QT_NO_DEBUG
// 打印转换后的二进制
QString strKeyOrigianl;
for (int i = 0; i < 64; ++i)
strKeyOrigianl += QString("%1,").arg(bKey[i]);
qDebug() << Q_FUNC_INFO << __LINE__ << "二进制:" << strKeyOrigianl;
#endif
}
例如:stringToBinary("hebbeKey");
则输出的二进制为:
"0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,0,1,"
//获取发送者指针
QMenu *childMenu=qobject_cast<QMenu *>(sender());
qDebug()<<"childMenu->objectName()=="<<childMenu->title();