QObject :: connection (const QObject *, const char *, const char *, Qt :: ConnectionType) & quot; Невозможно преобразовать аргумент 3 из ‘fileProcessor’ в const QObject * & quot;

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

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

0

Решение

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

невозможно преобразовать аргумент 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. Таким образом, ваш fileProcessor будет существовать до тех пор, пока существует его MainWindow.

2

Другие решения


По вопросам рекламы [email protected]