0

複数のウィンドウが発生する Qt アプリケーションを構築しようとしています。

例: メイン ウィンドウがあり、その上に設定メニューがあります。設定メニューをクリックすると、別のウィンドウに「設定」というタイトルが表示され、プログラムのさまざまな設定プロパティが表示されるようにします。

この設定ウィンドウは、コードだけで作成するのではなく、Qt Creator で設計してほしいです。設定ウィンドウを設計し、settings.ui ファイルをプロジェクトに追加しました。

mainWindow.h と mainWindow.cpp (gui プロジェクトを作成したときに自動的に生成された) の構造に従って、settingsWindow.cpp と settingsWindow.h も作成しました。

しかし、コンパイルすると、ui(new Ui::settingsWindow)settingsWindow.cppのsettingsWindowコンストラクターでエラーが表示されます

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

エラーは言う:'Ui::settingsWindow' : no appropriate default constructor available

settingsWinow.h の内容は次のとおりです。

#ifndef SETTINGSWINDOW_H
#define SETTINGSWINDOW_H

#include <QMainWindow>

namespace Ui
{
    class settingsWindow;
}

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

private:
    Ui::settingsWindow *ui;
};

#endif // SETTINGSWINDOW_H

私は何をすべきか?

4

3 に答える 3

2

ウィンドウ作成のどこかを台無しにしました。QtCreator のみを使用する場合は、次のことを行う必要があります。

File -> New File or Project ->Qt -> Qt Designer Form Class 

次に、編集できるフォームが作成されます。フォームはクラスを生成しui::settingsWindowます。反対側には、上に示したものと同じコードを持つのクラスがあります。settingsWindow

ps: クラスについて心配する必要はありませんui::settingsWindow提供したサンプルコードにないディレクティブがあることを確認してください

#include "ui_settingsWindow.h"
于 2013-05-22T13:30:32.237 に答える
1

settingswindow クラスを正しく作成したと仮定すると (プロジェクト エクスプローラーのフォーム リストを右クリック -> 新規追加 -> qt -> qt デザイナー フォーム クラスを使用して、settingswindow クラスを実装する必要があります)、settingsWindow.h を含める必要があります。 mainWindow.h で、settingsWindow クラスの mainwindow.h ポインターを作成し (グローバルにしたい場合)、mainwindow.cpp で、たとえば QWidget を作成するように作成しますが、親はありません。

メインウィンドウ.h:

#include "settingsWindow.h"

... mainwindow class...

settingsWindow *sw;

.....

メインウィンドウ.cpp:

... somewhere in constructor:
sw= new settingsWindow();
sw->show(); //(don't forget to delete sw in destructor, if you won't set any widget as it's parent)
于 2013-05-22T13:23:04.917 に答える
0

おそらく、QMainWindow と ui セットアップの間に衝突があります。QWidget に変更して、Ui と QWidget の両方を継承してみてください。

#ifndef SETTINGSWINDOW_H
#define SETTINGSWINDOW_H

#include <QWidget>
#include <QMainWindow>


namespace Ui
{
    class settingsWindow;
}

class settingsWindow : public QWidget, Ui::settingsWindow
{
    Q_OBJECT
public:
    explicit settingsWindow(QWidget *parent = 0);
    ~settingsWindow();
    QMainWindow* m_parent;

private:
    Ui::settingsWindow *ui;
};

と:

settingsWindow::settingsWindow(QWidget *parent) :
    m_parent(parent)
{
    ui->setupUi(this);
}
于 2013-05-22T13:23:31.020 に答える