0

我似乎需要 p 的实例类型为 QObject,我已经扩展了 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: 错误: C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt ::ConnectionType) const' : 无法将参数 3 从 'fileProcessor' 转换为 'const QObject *' 没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符

4

1 回答 1

2

编译器通过这一行表示什么

无法将参数 3 从“fileProcessor”转换为“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 就会存在。

于 2014-11-06T03:24:05.833 回答