自定义槽 No such slot

fengyoujie 2012-06-05 04:57:15
诸位好。最近在做qt,自定义槽的时候,出现如下错误。先把代码贴出了,请各位老师,过目。

头文件:mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui/QLineEdit>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
QVector<QLineEdit*> lines;
QStringList paths;

public slots:
void upload2Ftp();
void inputFinish(QString,int);

};

#endif // MAINWINDOW_H


源文件:mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QObject>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow) {

ui->setupUi(this);

lines.append(ui->lineEdit_0);
lines.append(ui->lineEdit_1);
lines.append(ui->lineEdit_2);
lines.append(ui->lineEdit_3);
lines.append(ui->lineEdit_4);

ui->progressBar->setRange(0,100);
ui->progressBar->setValue(0);


for(int i=0;i<lines.size();i++){
QLineEdit* edit = lines.at(i);
connect(edit,SIGNAL(editingFinished()),this->centralWidget(),SLOT(this->inputFinish(edit->text(),i)));
}

connect(ui->pushButton_0,SIGNAL(clicked()),this->centralWidget(),SLOT(this->upload2Ftp()));
}

MainWindow::~MainWindow() {
delete ui;
}

void MainWindow::inputFinish(QString path,int index) {
paths.replace(index,path);
}

void MainWindow::upload2Ftp(){
for(int i=0;i<lines.size();i++){
qDebug()<<paths.at(i);
}
}



main.cpp文件


#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtGui/QPushButton>
#include <QtGui/QLineEdit>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}




运行能出现界面,但是提示如下信息:
D:\ifnp\ftpGui\ftpGui-build-desktop\debug\ftpGui.exe 启动中...
Object::connect: No such slot QWidget::this->inputFinish(edit->text(),i) in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_0')
Object::connect: (receiver name: 'centralWidget')
Object::connect: No such slot QWidget::this->inputFinish(edit->text(),i) in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_1')
Object::connect: (receiver name: 'centralWidget')
Object::connect: No such slot QWidget::this->inputFinish(edit->text(),i) in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_2')
Object::connect: (receiver name: 'centralWidget')
Object::connect: No such slot QWidget::this->inputFinish(edit->text(),i) in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_3')
Object::connect: (receiver name: 'centralWidget')
Object::connect: No such slot QWidget::this->inputFinish(edit->text(),i) in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_4')


请诸位老师,错在哪里?
...全文
789 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
魔芋胡萝卜 2013-06-20
  • 打赏
  • 举报
回复
学习了...果然是this的问题
qianqian0007 2013-04-26
  • 打赏
  • 举报
回复
bject::connect: No such slot QLabel::slotopen() in .\layoutdlg.cpp:27
Yeah_Csdn 2012-08-17
  • 打赏
  • 举报
回复
我也遇到同样的问题了,请问你是怎么解决的?
fengyoujie 2012-06-07
  • 打赏
  • 举报
回复
谢谢诸位,问题解决了。结贴给分。
jdwx 2012-06-05
  • 打赏
  • 举报
回复
信号和槽使用起来很简单,信号和槽参数必须对应,信号的参数可以比槽多,多余的参数会被自动舍弃。
参数只写类型(如:int,QString),不要写参数名。
jdwx 2012-06-05
  • 打赏
  • 举报
回复
void QLineEdit::textChanged ( const QString & text ) [signal]
问题在于,你写的信号,QLineEdit里没有,只有上面的那个,区别是有一个参数。
fengyoujie 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
必然出错!!!
你没有理解好this
connect(edit,SIGNAL(editingFinished()),this,SLOT(this->inputFinish(edit->text(),i)));

你的槽函数是定义在MainWindow 这个类中,所以接受者应该是this

而且我没有看错的话,你写的是centralWidget(),是个函数啊这个函数我在MainWind……
[/Quote]



您的回答,让我更明白一步。
目前我把代码又改了一下:

for(int i=0;i<lines.size();i++){
QLineEdit* edit = lines.at(i);
connect(edit,SIGNAL(editingFinished()),this,SLOT(inputFinish(edit->text(),i)));
}

connect(ui->pushButton_0,SIGNAL(clicked()),this,SLOT(upload2Ftp()));

其余的不变。


错误还是有。
老师,我定义了两个槽
public slots:
void upload2Ftp();
void inputFinish(QString,int);

但是程序运行的时候,有一个槽没有找到。提示错误如下。老师给看看哪块出来问题?
Object::connect: No such signal QLineEdit::textChanged() in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_0')
Object::connect: (receiver name: 'MainWindow')
Object::connect: No such signal QLineEdit::textChanged() in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_1')
Object::connect: (receiver name: 'MainWindow')
Object::connect: No such signal QLineEdit::textChanged() in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_2')
Object::connect: (receiver name: 'MainWindow')
Object::connect: No such signal QLineEdit::textChanged() in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_3')
Object::connect: (receiver name: 'MainWindow')
Object::connect: No such signal QLineEdit::textChanged() in ..\ftpGui\mainwindow.cpp:23
Object::connect: (sender name: 'lineEdit_4')
Object::connect: (receiver name: 'MainWindow')

请问又是哪块出来问题?多谢了


  • 打赏
  • 举报
回复
老湿……直译过来就是 没有相关槽函数的定义, this->centralWidget()这个返回的是QMainWindow的中间Widget,没看到LZ setCentralWidget ( QWidget * widget )?LZ应该把各个信号的接受者连起来 而不是QMainWindow的CentralWidget;

for(int i=0;i<lines.size();i++)
{
QLineEdit* edit = lines.at(i);
connect(edit,SIGNAL(editingFinished()), edit ,SLOT(this->inputFinish(edit->text(),i)));
}
我是学友 2012-06-05
  • 打赏
  • 举报
回复
必然出错!!!
你没有理解好this
connect(edit,SIGNAL(editingFinished()),this,SLOT(this->inputFinish(edit->text(),i)));

你的槽函数是定义在MainWindow 这个类中,所以接受者应该是this

而且我没有看错的话,你写的是centralWidget(),是个函数啊这个函数我在MainWindow 里面也没有找到,这么写有点莫名其妙,接受者不可以是函数

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧