首页 新闻 会员 周边 捐助

Qt信号连接问题

0
[已解决问题] 解决于 2016-05-29 16:37

用QtCreator设计一个主窗口 MainWindow,添加一个pushbutton控件。

然后设计一个子窗口较showResult, 用QtCreator在上面添加一个Widget控件。将Widget控件提升为类glwidget。在glwidget中建立一个槽 void receiveMatandImage(...)。

然后在MainWindow中建立一个信号 void sendMatandImage(...)

然后对控件pushbutton添加动作

void MainWindow::on_pushbutton_clicked()
{
    //生成发送的数据
    ....
    /
    ??????             
}

我想在???部分将信号sendMatandImage(...)和槽void receiveMatandImage(...)连接起来,请问如何做到。接收的指针应该如何填写??

nano_zombie.uestc的主页 nano_zombie.uestc | 初学一级 | 园豆:113
提问于:2016-05-28 12:41
< >
分享
最佳答案
0

你的意思是点击按钮pushbutton发出信号,然后glwidget在槽receiveMatandImage获得信号接收数据吧。

先建立信号槽连接:

connect(this, SIGNAL(sendMatandImage(...)), glwidget, SLOT(receiveMatandImage(...)));

在单击按钮时发出信号

void MainWindow::on_pushbutton_clicked()

{

//生成发送的数据

....

/

emit sendMatandImage(...);

}

奖励园豆:5
去冰三分糖 | 菜鸟二级 |园豆:380 | 2016-05-29 13:20

嗯,glwidget是在mainWIndow下新建的glwidget类的指针吗??

换句话说,具体形式是什么??虽然这个问题我已经解决了,但是我还是想知道新的办法。

nano_zombie.uestc | 园豆:113 (初学一级) | 2016-05-29 15:57

@nano_zombie.uestc: glwidget就是你在mainWindow的ui中拖的一个widget控件,然后提升为glwidget。相当于在mainWindow中创建的一个glwidget类的指针。

不过对于这种情况,不需要信号槽的,只要在glwidget类中写一个public函数,在mainwindow中单击按钮时,调用glwidget对象的那个共有函数。

去冰三分糖 | 园豆:380 (菜鸟二级) | 2016-05-29 16:10

@张君雅小妹妹: so sorry, 可能是我问题描述的有问题。我希望的功能是,点击pushbutton按钮之后会新建一个子窗口,而glwidget是子窗口上widget控件提升来的类。

nano_zombie.uestc | 园豆:113 (初学一级) | 2016-05-29 16:12

@张君雅小妹妹: 嗯,我的做法是这样的

void in_pushbutton_clicked()
{
    ....
    subwindow *s = new subwindow;
    connect(this, SINGAL(sendMatandImage(...), s, SLOT(receiveBuff(...)))
    emit sendMatandImage(...)
}

然后在s类中新建一个槽sendBuff,将接受的信号转发给glwidget类。

nano_zombie.uestc | 园豆:113 (初学一级) | 2016-05-29 16:16

@nano_zombie.uestc: 

class mainwindow
{
    void buttonclicked()
    {
        subwindow *s = new subwindow;
        s->getdata(strData);
    }
};

class subwindow
{
public:
    void getdata(string strData)
    {
        m_glwidget->receiveData(strData);
    }

private:
    glwidget *m_glwidget;
};

class glwidget
{
public:
    void receiveData(string strData)
    {
        //根据strData,do something
    }
};
去冰三分糖 | 园豆:380 (菜鸟二级) | 2016-05-29 16:28

@张君雅小妹妹: 嗯,谢谢。我理解了你的意思,大概和我的想法差不多。就是利用subwindow来辅助传递信号。

很感谢你的耐心回答,其实这段时间很感谢网上的很多答主,cnblog,opencv forum 和stackoverflow 很多人的热心回答才使我这个一开始只识Matlab的同学,完成一个和我专业几乎毫不相干的毕设。

nano_zombie.uestc | 园豆:113 (初学一级) | 2016-05-29 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册