首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

信号与槽的有关问题

2012-09-27 
信号与槽的问题A窗体调B窗体控件,用信号槽连接不行,求原因,具体如下:关于A:C/C++ codeClass A::public QMa

信号与槽的问题
A窗体调B窗体控件,用信号槽连接不行,求原因,具体如下:
关于A:

C/C++ code
Class A::public QMainWindow{   Q_OBJECTPublic:A(QWidget *parent = 0,Qt::WFlags flags = 0);~A();Void creatDockWindows();//在此中创建BPrivate slots:Void disposeB_TreeList(QTreeWidget * TreeWidget);//槽函数,其中得到B的控件Private:   QTreeWidget *pTreeListofB;//将槽中获得的控件赋予此变量…}构造函数:A::A(QWidget *parent,Qt::WFlags flags):QMainWindow(parent,flags){   ui.setupUi(this);createDockWindows();QTreeWidget * a = pTreeListofB;//触发槽后,得到B中控件,实际上得不到}成员函数:A:: creatDockWindows(){   QDockWidget * dock = new QDockWidget(tr(“B”,this));   Dock->setAllowdAreas(Qt::LefeDockWidgetArea|Qt::RightDockWidgetArea);   B temp;Connect(&temp,SIGNAL(sendTreeList(QTreeWidget*),this,SLOT(disposeB_TreeList(QTreeWidget*)));//连接信号和槽B * a = new B;dock->setWidget(a);addDockWidget(Qt::RightWidgetArea,dock);optionsMenu->addAction(dock->toggleViewAction());}槽函数:Void A::disposeB_TreeList(QTreeWidget * TreeWidget){   pTreeListOfB = TreeWidget;}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
关于B:
C/C++ code
Class B: public QDialog{   Q_OBJECTPublic:   B(QWidget *parent = 0);~B();Public:   QTreeWidget * getTreeList(void);//获取私有控件   QTreeWidget * p_treeList;//指向控件指针Signals:   Void sendTreeList(QTreeWidget *);//定义信号…}构造函数:B::B(QWidget *parent):QDialog(parent){   Ui.setupUi(this);   p_treeList = getTreeList();//将私有控件赋值给公有变量   emit sendTreeList(p_treeList);//发射信号,将控件指针作为参数}成员函数:QTreeWidget * B::getTreeList(void){    p_treeList = ui.p_gsTreeList;   return p_treeList;}


[解决办法]
你的信号是在构造函数里面发出来的,但是此时你都还没有进行信号的关联
B temp;//信号已发出,但是没有关联槽函数
Connect(&temp,SIGNAL(sendTreeList(QTreeWidget*),this,SLOT(disposeB_TreeList(QTreeWidget*)));//关联了槽函数,但此时不再会有信号的发出
B * a = new B;//发出信号,但是关联信号和槽的对象不是同一个
修改下你的代码逻辑吧,这个还真没有在构造函数中发送信号的。

热点排行