Соответствие функций в Qt - PullRequest
0 голосов
/ 29 марта 2010

У меня проблемы с Qt.

У меня есть класс 'Core'

class Core {

   public:

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

   private:
        static MainWindow *main_window;
};

и класс 'MainWindow' в пространстве имен Ui:

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.

Итак, вопрос в том, почему метод класса Core setMainwindow () невидим в классе MainWindow?

Ответы [ 3 ]

4 голосов
/ 29 марта 2010

Проблема в том, что ваш Core::setMainwindow метод принимает Ui::MainWindow*, а вы передаете MainWindow*. Из кода, который вы опубликовали, у вас есть два MainWindow класса, один в пространстве имен Ui и один в пространстве имен верхнего уровня. Это то, что вы имеете в виду, или в Ui может быть только один?

1 голос
/ 30 марта 2010

Ваш класс MainWindow не вложен в пространство имен Ui. Вы заранее объявили класс Ui::MainWindow, но затем реализовали отдельный класс ::MainWindow (в глобальном пространстве имен). Из-за этого ваш Core::setMainwindow получает Ui::MainWindow, но вы передаете ::MainWindow.

Я предполагаю, что это отсутствие вложенности правильно - и Qt Designer генерирует Ui::MainWindow, а MainWindow - это класс реализации, который содержит весь ваш пользовательский код. Если это так, измените свой код на:

class Core {

   public:

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

   private:
        static MainWindow *main_window;
};
1 голос
/ 29 марта 2010

Вы добавили "Core.h" в файл cpp / h вашего MainWindow?

Вы пробовали без параметра в setMainWindow, просто чтобы проверить, не связано ли это с чем-то?

Редактировать: мне кажется, вам нужно MainWindow в качестве параметра, а не Ui :: MainWindow, не так ли?

...