我動態地創建一個菜單。我在一個菜單中添加了幾個可檢查的操作。有時動作可能與用戶看到的文字相同。這取決於用戶(實際上用戶將命令添加到菜單中)。Qt:菜單中的兩個動作(使用相同的文本)
問題是在這種情況下點擊工程是錯誤的。如果我點擊第一個動作(從2到相同的文本),一切都很好,但如果我點擊第二個動作,就會選擇兩個動作。我不明白爲什麼。其中,已創建行動的代碼是在這裏:
for (int i = 0; i< currentList.size(); i++)
{
QString lanKey = currentList.at(i)->Language->toString();
QAction* lanAction = new QAction(this);
QString name ="action_" + currentList.at(i)->Id->toString();
lanAction->setObjectName(name);
lanAction->setText(lanKey);
lanAction->setCheckable(true);
lanAction->setData(i);
connect(lanAction, SIGNAL(triggered(bool)), this, SLOT(ShowSomething(bool)));
ui->menuMy->addAction(lanAction);
}
這裏,lanKey
是語言,可能是不同的動作相同。無論如何,點擊具體的行動應該只導致檢查這一行動。怎麼了?
插槽是在這裏:
void VMainWindow::ShowSomething(bool IsTriggered)
{
QAction* senderAction = (QAction*)sender();
int listIndex = senderAction->data().toInt();
if (IsTriggered)
{
CreateEditor(subtitles, listIndex);
}
else
{
//hide this editor
QString name = "editor" + editorsList->Id->toString();
QDockWidget* editorDock = this->findChild<QDockWidget*>(name);
if (editorDock != 0)
{
this->removeDockWidget(editorDock);
this->setLayout(layout());
}
}
}
感謝
的問題的來源發現:原來這個插槽發現檢查行動錯誤 - 通過文字,而不是ID。
此代碼看起來不錯。你可以顯示'ShowSomething(布爾)'方法的代碼?問題可能會隱藏在那裏 –
感謝您的回覆,我已經更新了這個問題。 – mimic
我分析了SLOT正在做什麼,發現錯誤!事實證明,它發現點擊行爲錯誤,通過文本,而不是名稱。謝謝蒂姆! – mimic