• 4765阅读
  • 2回复

[提问]Qt中不同类之间信号与槽的连接问题 [复制链接]

上一主题 下一主题
离线zheguzai
 

只看楼主 倒序阅读 楼主  发表于: 2013-09-14
刚写了一个小程序测试了一下,本来想实现在一个界面中点击一个按钮然后通过信号发送一个字符串给另外一个界面,并显示在另外一个界面的文本框中,按照想法写了之后发现不能实现,


报错内容如下:

[size=; font-size:10pt,10pt][font='Courier']Object::connect: No such signal Form::sendstr(string) in [size=; font-size: 10pt,10pt]..\singaltest\widget.cpp:11
[size=; font-size:10pt,10pt][font='Courier']Object::connect:  (sender name:   'Form')
[size=; font-size:10pt,10pt][font='Courier']Object::connect:  (receiver name: 'Widget')
[size=; font-size:10pt,10pt][font='Courier']

下面具体说下我是怎么实现的,大家帮我看看我哪里有问题
主界面为widiget类,上面有一个文本框,我在此类中实现一个槽,用于将另外一个类中发送过来的字符串显示在主界面的文本框中


下面两个文件时主界面的
widget.h文件
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include "form.h"
  5. #include <QDebug>
  6. namespace Ui {
  7. class Widget;
  8. }
  9. class Widget : public QWidget
  10. {
  11.     Q_OBJECT
  12.     
  13. public:
  14.     explicit Widget(QWidget *parent = 0);
  15.     ~Widget();
  16. public slots:
  17.     void getstr(QString str1);
  18.     
  19. private:
  20.     Ui::Widget *ui;
  21.     QString string;
  22.     Form *f;
  23. };
  24. #endif // WIDGET_H
widget.cpp文件
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent) :
  4.     QWidget(parent),
  5.     ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     f = new Form();
  9.     connect(f,SIGNAL(sendstr(string)),this,SLOT(getstr(string)));
  10.     f->show();
  11. }
  12. Widget::~Widget()
  13. {
  14.     delete ui;
  15. }
  16. void Widget::getstr(QString str1)
  17. {
  18.     ui->lineEdit->setText(str1);
  19.     qDebug()<<str1;
  20. }


下面是另外一个界面的类
form.h文件
  1. #ifndef FORM_H
  2. #define FORM_H
  3. #include <QWidget>
  4. namespace Ui {
  5. class Form;
  6. }
  7. class Form : public QWidget
  8. {
  9.     Q_OBJECT
  10.     
  11. public:
  12.     explicit Form(QWidget *parent = 0);
  13.     ~Form();
  14.     
  15. private:
  16.     Ui::Form *ui;
  17.     QString string;
  18. signals:
  19.     void sendstr(QString str2);
  20. private slots:
  21.     void on_pushButton_clicked();
  22. };
  23. #endif // FORM_H
form.cpp
  1. #include "form.h"
  2. #include "ui_form.h"
  3. #include <QDebug>
  4. Form::Form(QWidget *parent) :
  5.     QWidget(parent),
  6.     ui(new Ui::Form)
  7. {
  8.     ui->setupUi(this);
  9. }
  10. Form::~Form()
  11. {
  12.     delete ui;
  13. }
  14. void Form::on_pushButton_clicked()
  15. {
  16.     string = "fuck you ass";
  17.     emit sendstr(string);
  18.     qDebug()<<"emit";
  19. }


大家看看我什么地方写错了,为什么不能实现??,
程序运行界面如下






离线zheguzai

只看该作者 1楼 发表于: 2013-09-14
我在form类中实现了信号,在widigel中实现了槽,然后在widget类中创建form对象,通过connect将form的类跟widiget的槽连接,这样有问题么
离线zheguzai

只看该作者 2楼 发表于: 2013-09-14
问题解决了,让各位见笑了,哎,就是那个connect()写错了,
其中signal函数和slots函数的参数都要写成参数类型
快速回复
限100 字节
 
上一个 下一个