首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定QAction的来源?

如何确定QAction的来源?
EN

Stack Overflow用户
提问于 2011-05-15 00:22:42
回答 1查看 2.5K关注 0票数 3

我想知道是否有任何简单/优雅的方法来确定QAction的来源?我的意思是我有一个QAction,它被添加到多个QWidgets (使用QWidget::addAction),当动作的触发信号发出时,我需要知道哪个QWidget是源,因为我需要查询那个特定的小部件。

我看不到使用QAction本身做这件事的任何方法,无论从哪里触发操作,父操作总是相同的。

我必须解决这个问题的想法是保存一个指向活动小部件的全局指针,但在Qt中似乎没有一种优雅的方法来捕获小部件接收焦点时的事件,从而将其设置为活动小部件。

另一种方法是为每个小部件使用不同的QActions,但在我的例子中,最好使用一个,因为用户可以自定义操作的快捷键,我不认为具有相同快捷键和文本等的多个操作是好的设计,这些操作都做相同的事情,但操作不同的小部件。

附注:大多数操作都可以通过快捷方式触发(启用了小部件上下文,因此小部件无论如何都需要焦点),也可以从该小部件上的自定义上下文菜单触发。

我可以提供一个简单的代码示例,如果这有助于理解我的问题:

代码语言:javascript
复制
// init the action etc.
void Widget::init()
{
    QAction *action = new QAction("Do Something");
    action->setShortcut("Ctrl+X");
    action->setShortcutContext(Qt::WidgetShortcut);
    connect(action, SIGNAL(triggered()), SLOT(action_triggered()));

    // assume the widgets 1 to 3 already exist (type QWidget* off course)
    widget1->addAction(action);
    widget2->addAction(action);
    widget3->addAction(action);
}

// SLOT action_triggered()
void Widget::action_triggered()
{
    QWidget *source;
    // TODO: which widget is the source: widget1, widget2 or widget3?
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-15 01:10:13

我认为您可以使用QAction associatedWidgets方法来确定添加了操作的小部件列表。然后,您可以检查此列表中当前具有焦点的小部件。

代码语言:javascript
复制
QList <QWidget *> widget_list = sender()->associatedWidgets();

for(int i = 0; i != widget_list.size(); ++i) {
    if (widget_list.at(i)->hasFocus()){
        sourceWidget = widget_list.takeAt(i);
        break;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6003139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档