• 10291阅读
  • 5回复

多个菜单项信号共用一个SLOT,如何判断哪个菜单项发出的信号? [复制链接]

上一主题 下一主题
离线aniven
 

只看楼主 倒序阅读 楼主  发表于: 2008-11-20
— 本帖被 XChinux 执行加亮操作(2008-11-20) —
多个菜单项信号共用一个SLOT,如何判断哪个菜单项发出的信号?

我想把Styles加入菜单中,并根据菜单的文本设置Style
离线vrcats
只看该作者 1楼 发表于: 2008-11-20
QObject * QObject::sender(...), 不过很麻烦,最好还是多写几个slots吧
离线XChinux

只看该作者 2楼 发表于: 2008-11-20
QAction *act = qobject_cast<QAction *>(sender());
QMenu *menu = act->menu();
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线htyoung

只看该作者 3楼 发表于: 2008-11-20
我的方法同xchinux
因为 QAction 有个函数叫setData,
你可以通过它加个标志位

给各例子:
#define ID_EDIT_COPY 1005
QAction action = new QAction(icon, name, 0)
action->setData(ID_EDIT_COPY);

然后在接收的地方过滤一下。

void Form1::slotEditCommand()
{
    QAction* a = qobject_cast<QAction*>(sender());
    if (a != 0)
    {
        CommandID id = CommandID(a->data().toInt());
    switch (id)
    {
    case ID_EDIT_COPY:
        slotEditCopyAction();
        break;
    case ID_EDIT_CUT:
        slotEditCutAction();
        break;
    case ID_EDIT_PASTE:
        slotEditPastAction();
        break;
    default:
        break;
    }
    }
}
***
QT5
***
离线wu9961

只看该作者 4楼 发表于: 2008-11-24
我有比较别致的方法 是对于不仅仅是一种控件进行判断的
你可以借鉴一下 这是我程序的一部分 是通过对象名来判断的
QObject *qob=qobject_cast<QObject*>(sender());
    QString fileName=QFileDialog::getOpenFileName(
                        this,
                        "open file",
                        "/",
                        "allfile(*.*)"
                    );
    if (qob->objectName()==ui.browseleft_button->objectName()||qob->objectName()==ui.action_Open_Left_Video->objectName())
        ui.inputright->setText(fileName);
    else if (qob->objectName()==ui.browseright_button->objectName()||qob->objectName()==ui.action_Open_Right_Video->objectName())
        ui.inputleft->setText(fileName);
[ 此贴被wu9961在2008-11-24 11:45重新编辑 ]
离线waterddy

只看该作者 5楼 发表于: 2008-11-25
我也是用得sender,但是我是通过比较sender的Text来确定到底是哪个Action发出的信号。

个人感觉各种方法都不错,关键是根据需求判断了!
快速回复
限100 字节
 
上一个 下一个