No such signal创建了工具栏,添加了第三个QAction时,在MainWindow类里RectAction[2] new QAction(tr(&T
No such signal 创建了工具栏,添加了第三个QAction时,在MainWindow类里
RectAction[2] = new QAction(tr("&Text"), this); RectAction[2]->setStatusTip(tr("Inpute a Text.")); RectAction[2]->setIcon(QIcon("icons/encoding.png")); connect(RectAction[2],SIGNAL(triggered()),this,SLOT(Text_selected())); m_ptoolbar->addAction(RectAction[2]);///// m_paction = RectAction[2];////m_paction 为全局变量,为了传到另一个类里还是在MainWindow里,Text_selected槽函数
void MainWindow::Text_selected() { emit createText();//信号能进这里,发到另一个类里面 } 另一个类 MyPainter::MyPainter()//MyPainter里面做信号处理 { connect(m_paction,SIGNAL(createText()),this,SLOT(recvtocreateText()),Qt::DirectConnection);//这里连接createText信号!!! } void MyPainter::recvtocreateText()///这个槽函数不被执行!!!!! { QLineEdit *edit = new QLineEdit(this); edit->move(QPoint());// edit->show(); }报警告说:Object::connect: No such signal QAction::createText() in MyPainter.cpp:41
可是我的程序有这个信号啊!!!!!
[最优解释] 在MainWindow的构造函数里new出一个MyPainter对象,然后添加信号槽:
connect(mainwindow, SIGNAL(createText()),m_paction, SLOT(recvtocreateText()));
具体代码根据你程序改下,我随手写的
[其他解释] 你在信号槽里发出createText信号的sender是m_paction。
但是实际上你这个信号是在MainWindow里发出的。
我估计你的MyPainter的类里面没有createText这个信号
[其他解释] 引用: 你在信号槽里发出createText信号的sender是m_paction。 但是实际上你这个信号是在MainWindow里发出的。 我估计你的MyPainter的类里面没有createText这个信号 是没有的,因为这个createText信号我已经在MainWindow里定义并发出了....
在MyPainter类里接收并处理...
[其他解释] 你的代码里:connect(m_paction,SIGNAL(createText()),this,SLOT(recvtocreateText()),Qt::DirectConnection);
你说createText是MainWindow里定义并发出了,但你的connect里面,发出createText的是m_paction,你m_paction类里面没有createText当然会报错。
MainWindow里的createText是MainWindow的,m_paction里的的createText是m_paction的。
你的用法就好像强迫姚明去踢足球一样。
[其他解释] 引用: 你的代码里:connect(m_paction,SIGNAL(createText()),this,SLOT(recvtocreateText()),Qt::DirectConnection); 你说createText是MainWindow里定义并发出了,但你的connect里面,发出createText的是m_paction,你m_paction类里面没有cre…… 是这样子的
我的想法是通过点击工具栏上的一个按钮,发出triggered())信号,然后其槽函数发出createText信号,然后在另一个类MyPainter里去接收信号,并调用槽函数来创建一个QLineEdit。就是这么回事的。
你说的确实有道理,昏头了我。也就是说现在变成了MainWindow发出信号了,那么connect(m_paction,SIGNAL(createText()),this,SLOT(recvtocreateText());函数第一个参数该这么写呢?
[其他解释] 引用: 在MainWindow的构造函数里new出一个MyPainter对象,然后添加信号槽: connect(mainwindow, SIGNAL(createText()),m_paction, SLOT(recvtocreateText())); 具体代码根据你程序改下,我随手写的 虽然用另一种方法解决了,但是还是会尝试你说的办法。
要不是你,我还看不出我的代码问题出哪儿了。
[其他解释] 引用: 引用:在MainWindow的构造函数里new出一个MyPainter对象,然后添加信号槽: connect(mainwindow, SIGNAL(createText()),m_paction, SLOT(recvtocreateText())); 具体代码根据你程序改下,我随手写的 虽然用另一种方法解决了,但是还是会……
谢谢