2

つまり、ウィジェットを右クリックし、「スロットに移動...」を選択してスロットを作成します。

例 1、これは機能します。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

どうやらデザイナーは Ui::MainWindow* を探し、それが見つからない場合は完全にびっくりするためです (「'Ui::MainWindow' を含むクラスが見つかりませんでした ...」というメッセージが表示されます)。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <memory>
#include <QMainWindow>

namespace Ui {
class MainWindow;
}



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

private:
    std::unique_ptr<Ui::MainWindow> ui;
};

#endif // MAINWINDOW_H

私は基本的に、Qt に「はい、本当にそのクラスを意味します。Ui::MainWindow* が含まれていないことはわかっています。大丈夫です。すべて問題ありません...」と伝える方法を探しています。私が間違っていて、何らかの理由でクラスが実際にこれを単純なポインターにする必要がある場合を除きます。

4

1 に答える 1

0

「'Ui::MainWindow' を含むクラスが見つかりませんでした ...」という問題は、QT 作成者がスロット関数定義を配置するための「mainwindow.cpp」ファイルを見つけられない場合に発生します。

mainwindow.h にプライベート変数として次のものが含まれていることを確認してください。

Ui::MainWindow *ui;

そして、次のインクルードが mainwindow.cpp ファイルにあります。

#include "ui_mainwindow.h"

これが機能しない場合は、QT クリエーターにバグがある可能性があります。ソフトウェアを更新してみてください。

于 2019-11-18T17:03:03.787 に答える