找回密码
 立即注册
收起左侧

pushbutton 加了QMenu,用什么信号知道选了什么?

12
回复
11168
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2014-5-10 21:37:00 显示全部楼层 |阅读模式
1Qter豆
《qt creator 快速入门》例子3-9

ui->pushBtn3->setText(tr("z&oom"));
    QMenu *menu = new QMenu(this);
    menu->addAction(QIcon("../image/zoom-in.png"),tr("放大"));
    menu->addAction(QIcon("../image/zoom-in.png"),tr("放"));
    menu->addAction(QIcon("../image/zoom-in.png"),tr("大"));
    ui->pushBtn3->setMenu(menu);
我加成了3个action。

但是不知道使用的时候选择的话,是用什么信号来捕捉。知道选的是哪个?

如图:

谢谢大家了。

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

这个应该关联QAction的信号,而不是QMenu。先创建QAction,然后添加到QMenu中,然后关联QAction的toggled的信号。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-10 21:37:01 显示全部楼层
这个应该关联QAction的信号,而不是QMenu。先创建QAction,然后添加到QMenu中,然后关联QAction的toggled的信号。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 21:37:19 显示全部楼层
Syylc120317 发表于 2014-5-10 21:37
这个应该关联QAction的信号,而不是QMenu。先创建QAction,然后添加到QMenu中,然后关联QAction的toggled的 ...

我试了,貌似有问题哦。
QAction *a1;
    QAction *a2;
    a1 = new QAction(QIcon("../image/zoom-in.png"),tr("放大"),this);
    a2 = new QAction(QIcon("../image/zoom-in.png"),tr("放"),this);
    menu->addAction(a1);
    menu->addAction(a2);
    ui->pushBtn3->setMenu(menu);
    connect(a1,SIGNAL(toggled(true)),this,SLOT(a1_true_toggled));

可以编译运行,但是有一个警告:
Object::connect: No such signal QAction::toggled(true) in ..\myButton\mywidget.cpp:33
Object::connect:  (receiver name: 'MyWidget')
选择了菜单也没反应。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-12 22:09:57 显示全部楼层
connect(a1,SIGNAL(toggled(true)),this,SLOT(a1_true_toggled));
这句有问题,connect(a1,SIGNAL(toggled()),this,SLOT(a1_true_toggled()));
a1_true_toggled()是你自己定义的槽函数。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 22:19:34 显示全部楼层
Syylc120317 发表于 2014-5-12 22:09
connect(a1,SIGNAL(toggled(true)),this,SLOT(a1_true_toggled));
这句有问题,connect(a1,SIGNAL(toggled( ...

是啊,这个槽我自己定义好了的。
void MyWidget::a1_true_toggled()
{
    qDebug() << "a1 true set";
}

private slots:
    void a1_true_toggled();

他的意思是好像,没有这个信号,但是明明我在帮助文档里面看到有的。
我改成
connect(a1,SIGNAL(toggled( bool checked )),this,SLOT(a1_true_toggled( bool checked )));
好像也不行。
一样会提示
Object::connect: No such signal QAction::toggled( bool checked )
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-12 22:22:40 显示全部楼层
caiwei_cs 发表于 2014-5-12 22:19
是啊,这个槽我自己定义好了的。
void MyWidget::a1_true_toggled()
{

嗯,那你这么写。
connect(a1,SIGNAL(toggled(bool)),this,SLOT(a1_true_toggled(bool)));

void a1_true_toggled(bool checked);

void MyWidget::a1_true_toggled(bool checked)
{
if(checked)
    qDebug() << "a1 true set";
}
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 22:30:35 显示全部楼层
Syylc120317 发表于 2014-5-12 22:22
嗯,那你这么写。
connect(a1,SIGNAL(toggled(bool)),this,SLOT(a1_true_toggled(bool)));

没有警告说没有这个型号了。
但是选择下拉菜单没有反应,好像没有进入槽,或者没有发出信号。
程序放在附件里面了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-12 22:33:44 显示全部楼层
caiwei_cs 发表于 2014-5-12 22:30
没有警告说没有这个型号了。
但是选择下拉菜单没有反应,好像没有进入槽,或者没有发出信号。
程序放在附 ...

嗯,要回去了,明天早上我帮你看看。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 22:35:40 显示全部楼层
Syylc120317 发表于 2014-5-12 22:33
嗯,要回去了,明天早上我帮你看看。

谢谢了先。谢谢了先。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-13 07:45:30 显示全部楼层
caiwei_cs 发表于 2014-5-12 22:35
谢谢了先。谢谢了先。


问题解决了,是信号选错了,是我记错了。
应该是triggered()即触发的意思,
不是toggled()即切换的意思。
//connect(a1,SIGNAL(toggled(bool)),this,SLOT(a1_true_toggled(bool)));
connect(a1,SIGNAL(triggered()),this,SLOT(a1_true_toggled()));

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-13 07:47:09 显示全部楼层
caiwei_cs 发表于 2014-5-12 22:35
谢谢了先。谢谢了先。

不客气,我应该道个歉,因为我刚开始给你说的是toggle信号,误导你了
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-13 21:04:37 显示全部楼层
Syylc120317 发表于 2014-5-13 07:47
不客气,我应该道个歉,因为我刚开始给你说的是toggle信号,误导你了 ...

哪里,谢谢你的帮助才是。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-14 07:37:37 显示全部楼层
caiwei_cs 发表于 2014-5-13 21:04
哪里,谢谢你的帮助才是。

不客气
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了