Где я могу хранить идентификатор QAction (группы)? - PullRequest
0 голосов
/ 30 августа 2009

Я вижу, что QButtonGroup s позволяет вам ввести целое число, когда вы делаете buttonGroup->addButton, а затем вы можете получить к нему доступ через сигнал buttonClicked. Это удобно для определения того, какая из кнопок в группе была нажата. Почему нет ничего похожего на QActionGroup с? У QActionGroup s есть сигнал selected, который вернет вам обратно QAction, который вы можете использовать, чтобы определить, какое действие было нажато, но я все еще хочу ассоциированный Id, чтобы я мог использовать свой enum. Есть ли где-нибудь внутри QAction, что я могу хранить такое целое число, без взлома?


Пример использования:

toolsActGroup = new QActionGroup(this);
toolsActGroup->setExclusive(true);

selectToolAct = new QAction(QIcon(":/icons/custom/select.png"), tr("&Select"), toolsActGroup);
selectToolAct->setIconVisibleInMenu(false);
selectToolAct->setShortcut(Qt::Key_S);
selectToolAct->setCheckable(true);
selectToolAct->setStatusTip(tr("Select objects to modify or delete"));
selectToolAct->setProperty("tool", EditorScene::Select);
selectToolAct->setChecked(true);

// more actions here...

connect(toolsActGroup, SIGNAL(selected(QAction*)), this, SLOT(toolSelected(QAction*))); // use one signal for the whole (exclusive) action group

void EditorWindow::toolSelected(QAction* act) {
    // pass the value to the widget that needs it
    m_scene->setTool((EditorScene::Tool)act->property("tool").toInt());
}

1 Ответ

4 голосов
/ 30 августа 2009

A QAction - это QObject, что означает, что вы можете установить и получить произвольные пары ключ-значение, используя QObject::setProperty и QObject::property.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...