0

我在使用 Qt 时遇到了一些问题。

我有一门课'核心'

class Core {

   public:

        static QString get_file_content(QString filename);
        static void setMainwindow(Ui::MainWindow const *w);

   private:
        static MainWindow *main_window;
};

和命名空间 Ui 中的类“MainWindow”:

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

在 MainWindow 构造函数中,我制作

 MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Core::setMainwindow(this);
}

并得到错误

mainwindow.cpp:8: error: no matching function for call to 'Core::setMainwindow(MainWindow* const)'

当然,我将 core.h 包含在“Core”类的声明中。

这仅发生在 setMainwindow 方法上。

所以问题是 - 为什么核心类方法 setMainwindow() 在 MainWindow 类中是不可见的?

4

3 回答 3

4

问题是您的Core::setMainwindow方法采用 aUi::MainWindow*并且您正在传递 a MainWindow*。从您发布的代码中,您有两个MainWindow类,一个在命名空间中Ui,一个在顶级命名空间中。这是你的意思还是应该只有一个Ui

于 2010-03-29T19:59:00.077 回答
1

您的MainWindow类没有嵌套在Ui命名空间内。您前向声明了Ui::MainWindow该类,但随后实现了一个单独的::MainWindow类(在全局命名空间中)。因此,您Core::setMainwindow需要 aUi::MainWindow但您正在通过::MainWindow.

我猜这种缺少嵌套是正确的——它Ui::MainWindow是由 Qt Designer 生成的,并且MainWindow是包含所有自定义代码的实现类。如果是这样,请将您的代码更改为:

class Core {

   public:

        static QString get_file_content(QString filename);
        static void setMainwindow(MainWindow const *w);

   private:
        static MainWindow *main_window;
};
于 2010-03-29T20:08:26.430 回答
1

您是否在 MainWindow 的 cpp/h 文件中添加了“Core.h”?

您是否尝试在 setMainWindow 中不使用参数,只是为了检查它是否与它无关?

编辑:是的,在我看来你需要 MainWindow 作为参数,而不是 Ui::MainWindow,你不觉得吗?

于 2010-03-29T19:57:01.423 回答