• 7352阅读
  • 10回复

[提问]信号和槽传参数 [复制链接]

上一主题 下一主题
离线tsinghtdh
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-04
做了三个类,从其中一个类的交互界面获取输入的5个参数,想把这5个参数传递给另一个类中的变量,我是这样做的:
  在图形界面的类里定义:
   signals:
   void senddbinform( QString ssdbkind ,QString ssdbname ,QString ssdbhost ,QString ssdbuser ,QString ssdbkey );、
    该类中有私有变量:
  QString sdbkind;
    QString sdbname;
    QString sdbhost;
    QString sdbuser;
    QString sdbkey;
    该类中定义
  connect( Dbok   ,SIGNAL( clicked() ) ,this ,SLOT( sendout() ) );
  与界面上Dbok按键的clicked()相连接的槽为:
    
void Dbconnect::sendout()
{
sdbkind = Dbkind -> currentText();
sdbname = Dbname -> currentText();
sdbhost = Dbhost -> currentText();
sdbuser = Dbuser -> currentText();
sdbkey  = Dbkey  -> text();
emit senddbinform( sdbkind , sdbname ,sdbhost ,sdbuser , sdbkey );
}
在另一个类中定义槽函数
void QDbcon::setdbinfor( QString Dbkind ,QString Dbname ,QString Dbhost ,QString Dbuser ,QString Dbkey)
{
    dbkind  = Dbkind;
    dbname  = Dbname;
    dbhost  = Dbhost;
    dbuser  = Dbuser;
    dbkey   = Dbkey;
}
dbkind,dbname........都是这个类的私有成员变量
第三个类中定义
void datahandle::creatconnect()
{
    Dbconnect *dbconnectwindow = new Dbconnect( this );
    connect( dbconnectwindow ,SIGNAL( senddbinformation( QString ,QString ,QString ,QString ,QString ) ) ,connection ,SLOT(setdbinfor( QString ,QString ,QString ,QString ,QString ) ) );    
                dbconnectwindow -> show();
}

但是运行函数creatconnect()时就报错,说什么Violence access.......,我把红色那一栏注释掉就没事了。有哪位高手知道是什么原因吗?感激不尽!
离线jdwx

只看该作者 1楼 发表于: 2012-03-05
红色部分的connection 在哪里声明的?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线xuweistudy
只看该作者 2楼 发表于: 2012-03-05
离线xuweistudy
只看该作者 3楼 发表于: 2012-03-05
不知道你的类如何声明和定义的,看看头文件构造函数前加Q_OBJECT了吗?
离线dxfans

只看该作者 4楼 发表于: 2012-03-05
如果你方便的话,把源码提供出来。。我们下载到本地给你看看就快多了。。
离线tsinghtdh

只看该作者 5楼 发表于: 2012-03-05
回 1楼(jdwx) 的帖子
定义了三个类,一个是QDbcon,无图形界面,用于建立数据库连接,类里封装了QString格式的库参数,一个QSqlDatabase的对象,setdbinfor()是Dbcon里用来设置库信息的函数。
一个是datahandle,有图形界面,有QDbcon类型的成员对象指针conection,这个类中有void datahandle::creatconnect()
{
    Dbconnect *dbconnectwindow = new Dbconnect( this );
    connect( dbconnectwindow ,SIGNAL( senddbinformation( QString ,QString ,QString ,QString ,QString ) ) ,connection ,SLOT(setdbinfor( QString ,QString ,QString ,QString ,QString ) ) );    
                dbconnectwindow -> show();
}
槽函数,与datahandle图形界面上的按钮连接
Dbconnect为一个有图形界面的类,用于获取连接数据库要的参数。
我想做到在datahandle上按按钮弹出Dbconnect界面,在此界面上输入完所需参数后,按此界面上的按钮,把获得的参数传给datahandle里QDbcon的对象,该对象调用setdbinfor(),用接收到的值
赋给connection内的相对应参数。
可总是报错,我不知道是为什么。这是我老师一个项目的一部分,现在不方便发源代码,不好意思。
离线tsinghtdh

只看该作者 6楼 发表于: 2012-03-05
回 4楼(dxfans) 的帖子
这是我老师一个项目的一部分,现在不方便发源代码,不好意思。
离线jdwx

只看该作者 7楼 发表于: 2012-03-05
回 5楼(tsinghtdh) 的帖子
晕,本来挺简单的一个问题,就是看不明白。
你可以精简程序,或者写一个类似的例子,
因为有代码,编译,调试,很容易发现问题的。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线xiaogugood
只看该作者 8楼 发表于: 2012-03-05
你在 Dbconnect::sendout()函数里用emit发出的是senddbinform( sdbkind , sdbname ,sdbhost ,sdbuser , sdbkey )信号,但是你在datahandle::creatconnect()中connect的是SIGNAL( senddbinformation( QString ,QString ,QString ,QString ,QString )信号,这2个信号的名字不一样,估计编译器是因为你用了没声明的信号才报错说“Violence access”。
离线tsinghtdh

只看该作者 9楼 发表于: 2012-03-06
回 7楼(jdwx) 的帖子
好 我试试 谢谢
离线houjun_pyc
只看该作者 10楼 发表于: 2012-03-10
引用第8楼xiaogugood于2012-03-05 13:39发表的  :
你在 Dbconnect::sendout()函数里用emit发出的是senddbinform( sdbkind , sdbname ,sdbhost ,sdbuser , sdbkey )信号,但是你在datahandle::creatconnect()中connect的是SIGNAL( senddbinformation( QString ,QString ,QString ,QString ,QString )信号,这2个信号的名字不一样,估计编译器是因为你用了没声明的信号才报错说“Violence access”。


8楼真仔细啊!
快速回复
限100 字节
 
上一个 下一个