c++ - QObject::connection(const QObject*, const char*, const char*, Qt::ConnectionType) "Cannot convert argument 3 from ' fileProcessor' to const QObject *"

标签 c++ qt signals slots

我似乎需要 QObject 类型的 p 实例,我已经扩展了 QObject 并在 fileprocessor.h 中定义了关键字 Q_OBJECT,我不确定我还能做什么。

-文件处理器.h

#ifndef FILEPROCESSOR_H
#define FILEPROCESSOR_H
#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QStandardItemModel>
#include <QObject>

class fileProcessor: public QObject
{
    Q_OBJECT
public:
    fileProcessor();
public slots:
    void on_action_Open_triggered();
    void checkString(QString &temp, QChar ch = 0);

public:
QList<QStringList> csv;
QStandardItemModel *model;
QList<QStandardItem*> standardItemList;
};


#endif // FILEPROCESSOR_H

-主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "fileProcessor.h"

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    fileProcessor p;
    ui->setupUi(this);
    QObject::connect(ui->Open, SIGNAL(clicked()),
                     p,SLOT(on_action_Open_triggered()));
}

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

-主窗口.cpp

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QStandardItemModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();


public:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

错误:

C:\Qt\Qt5.3.2\Tools\QtCreator\bin\Assignment3\mainwindow.cpp:10: error: C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const' : cannot convert argument 3 from 'fileProcessor' to 'const QObject *' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

最佳答案

编译器对这一行的意义

cannot convert argument 3 from 'fileProcessor' to 'const QObject *'

是您传递的是对象而不是对象的指针

所以您需要做的就是使用 & 符号来获取指向 p 的指针,就像这样,对吧?

fileProcessor p;
ui->setupUi(this);
QObject::connect(ui->Open, SIGNAL(clicked()),
                 &p,SLOT(on_action_Open_triggered()));

它会编译,但不会工作。

为什么?您的变量 p 将超出范围并在构造函数结束时被销毁,因此永远不会调用它的插槽。

最直接的解决方案是将 p 声明为 MainWindow 类的成员变量。这样,只要其 MainWindow 存在,您的 fileProcessor 就会存在。

关于c++ - QObject::connection(const QObject*, const char*, const char*, Qt::ConnectionType) "Cannot convert argument 3 from ' fileProcessor' to const QObject *",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771047/

相关文章:

c++ - 使用构造函数参数初始化结构数组

c++ - 应用世界变换

c - Linux 上的 C 多线程信号处理

c - 调试意外终止的守护进程

c++ - 打开文件功能出现问题

c++ - 模板偏序 - 为什么部分推导在这里成功

Qt 3D 无法构建图形管道

c++ - 为什么我的 C++/Qt 程序不执行任何操作?

qt - 引用 QML 单例类实例?

c - 捕获信号时使 open() 返回