用QtCreator设计一个主窗口 MainWindow,添加一个pushbutton控件。
然后设计一个子窗口较showResult, 用QtCreator在上面添加一个Widget控件。将Widget控件提升为类glwidget。在glwidget中建立一个槽 void receiveMatandImage(...)。
然后在MainWindow中建立一个信号 void sendMatandImage(...)
然后对控件pushbutton添加动作
void MainWindow::on_pushbutton_clicked() { //生成发送的数据 .... / ?????? }
我想在???部分将信号sendMatandImage(...)和槽void receiveMatandImage(...)连接起来,请问如何做到。接收的指针应该如何填写??
你的意思是点击按钮pushbutton发出信号,然后glwidget在槽receiveMatandImage获得信号接收数据吧。
先建立信号槽连接:
connect(this, SIGNAL(sendMatandImage(...)), glwidget, SLOT(receiveMatandImage(...)));
在单击按钮时发出信号
void MainWindow::on_pushbutton_clicked()
{
//生成发送的数据
....
/
emit sendMatandImage(...);
}
嗯,glwidget是在mainWIndow下新建的glwidget类的指针吗??
换句话说,具体形式是什么??虽然这个问题我已经解决了,但是我还是想知道新的办法。
@nano_zombie.uestc: glwidget就是你在mainWindow的ui中拖的一个widget控件,然后提升为glwidget。相当于在mainWindow中创建的一个glwidget类的指针。
不过对于这种情况,不需要信号槽的,只要在glwidget类中写一个public函数,在mainwindow中单击按钮时,调用glwidget对象的那个共有函数。
@张君雅小妹妹: so sorry, 可能是我问题描述的有问题。我希望的功能是,点击pushbutton按钮之后会新建一个子窗口,而glwidget是子窗口上widget控件提升来的类。
@张君雅小妹妹: 嗯,我的做法是这样的
void in_pushbutton_clicked() { .... subwindow *s = new subwindow; connect(this, SINGAL(sendMatandImage(...), s, SLOT(receiveBuff(...))) emit sendMatandImage(...) }
然后在s类中新建一个槽sendBuff,将接受的信号转发给glwidget类。
@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 } };
@张君雅小妹妹: 嗯,谢谢。我理解了你的意思,大概和我的想法差不多。就是利用subwindow来辅助传递信号。
很感谢你的耐心回答,其实这段时间很感谢网上的很多答主,cnblog,opencv forum 和stackoverflow 很多人的热心回答才使我这个一开始只识Matlab的同学,完成一个和我专业几乎毫不相干的毕设。