QT怎么重写按钮的信号和槽传递参数

baidu_20048575 2016-06-15 02:05:15
connect(button,SIGNAL(clicked(button->text())),this,SLOT(get(button->text())));

我想重写个类继承QPushButton,实现信号和槽带按钮的文本,我不知道该怎么重写这个类,能帮我用代码具体实现下么,和怎么调用这个自己的button类
...全文
3574 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CAThink 2019-12-29
  • 打赏
  • 举报
回复
多定义一个信号和函数用于传递你的参数就行了,不必重写clicked
rabbitjerry 2017-08-29
  • 打赏
  • 举报
回复
引用 7 楼 weixin_38429204 的回复:
[quote=引用 6 楼 rabbitjerry 的回复:] 简单的方式是: (1)设你自己的槽函数是func1(type1,type2,...),你自己再额外定义一个槽函数func2(没有输入信号的)、一个信号signal1(输入参数与func1相同)。 (2)把按键和func2连接起来;在func2中释放信号signal1; (3)按键触发后,进入槽函数func2,func2释放signal1,进入func1,这样func1就能得到参数了。
那么实参(实际参数,我要传递的真正的值),要在哪里传递?[/quote] 在func2里读取按键的文本,传递给func1
鬼泣四 2017-08-25
  • 打赏
  • 举报
回复
引用 6 楼 rabbitjerry 的回复:
简单的方式是: (1)设你自己的槽函数是func1(type1,type2,...),你自己再额外定义一个槽函数func2(没有输入信号的)、一个信号signal1(输入参数与func1相同)。 (2)把按键和func2连接起来;在func2中释放信号signal1; (3)按键触发后,进入槽函数func2,func2释放signal1,进入func1,这样func1就能得到参数了。
那么实参(实际参数,我要传递的真正的值),要在哪里传递?
rabbitjerry 2017-05-07
  • 打赏
  • 举报
回复
简单的方式是: (1)设你自己的槽函数是func1(type1,type2,...),你自己再额外定义一个槽函数func2(没有输入信号的)、一个信号signal1(输入参数与func1相同)。 (2)把按键和func2连接起来;在func2中释放信号signal1; (3)按键触发后,进入槽函数func2,func2释放signal1,进入func1,这样func1就能得到参数了。
Little柯南 2016-06-17
  • 打赏
  • 举报
回复
这样就轻而易举实现了你的需求,传递了QString也就是你的text,唯一不同就是做了2次信号与槽,但是毕竟比你重写要简单的多
Little柯南 2016-06-17
  • 打赏
  • 举报
回复
建议你这么来:connect(button,SIGNAL(clicked()),this,SLOT(getText()))); void myWidget::getText() { emit myText(button->text()); } connect(myWidget,SIGNAL(myText(QString)),this,getText(QString)); 我想上面这个很简单,你看懂应该不难
冷静忍耐 2016-06-16
  • 打赏
  • 举报
回复
没怎么懂,槽函数一般这么写: connect(button,SIGNAL(clicked()),this,SLOT(getText())));
聆听浪花 2016-06-16
  • 打赏
  • 举报
回复
参考QSingalMapper类

ButtonWidget::ButtonWidget(const QStringList &texts, QWidget *parent)
    : QWidget(parent)
{
    signalMapper = new QSignalMapper(this);

    QGridLayout *gridLayout = new QGridLayout;
    for (int i = 0; i < texts.size(); ++i) {
        QPushButton *button = new QPushButton(texts[i]);
        connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
        signalMapper->setMapping(button, texts[i]);
        gridLayout->addWidget(button, i / 3, i % 3);
    }

    connect(signalMapper, SIGNAL(mapped(QString)),
            this, SIGNAL(clicked(QString)));

    setLayout(gridLayout);
}
compass233 2016-06-16
  • 打赏
  • 举报
回复
你的要求不太合理吧 clicked事件本身没必要携带文本参数,因为槽函数里可以直接获取文本 还是你想自定义一组信号槽? 至于派生类怎么写, 对象怎么使用, 请灵活运用搜索引擎...

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧