QObject::connection(const QObject*, const char*, const char*, Qt::ConnectionType) Не удается преобразовать аргумент 3 из 'fileProcessor' в const QObject *

Кажется, мне нужен экземпляр p для типа QObject, я расширил QObject и определил ключевое слово Q_OBJECT в fileprocessor.h, я не уверен, что еще я могу сделать.

-Файлпроцессор.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

-Mainwindow.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;
}

-Mainwindow.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 *' Нет доступного пользовательского оператора преобразования, который может выполнить это преобразование, или оператор не может быть вызван


person user4217633    schedule 06.11.2014    source источник


Ответы (1)


Что компилятор подразумевает под этой строкой

невозможно преобразовать аргумент 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.

person MrEricSir    schedule 06.11.2014
comment
Большое спасибо за ваше понимание, мой ход мыслей немного сбился. после объявления его как указателя на p он теперь говорит мне, что неразрешенные внешние символы являются отражением проблемы, выходящей за рамки - person user4217633; 06.11.2014
comment
Нет причин объявлять p как указатель, вам просто нужно взять адрес объекта с помощью оператора &, как я сделал выше. Неразрешенные символы, вероятно, являются проблемой компоновщика и звучат как новый вопрос. - person MrEricSir; 06.11.2014
comment
Мне просто пришлось снова запустить qmake после поиска в Google. Еще раз спасибо, что нашли время помочь :) - person user4217633; 06.11.2014