gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:38:27 25 4
gpt4 key购买 nike

我似乎需要 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com