0

メインウィンドウからウィンドウを作成し、メインウィンドウへのポインターを送信したかったのです。1回はやりましたが、2回目はコンパイル時に「適切なデフォルトコンストラクタがありません」というエラーが常に発生します

メインウィンドウ:

#include "costsimulator.h"
#include "ui_costsimulator.h"

#include "stonepricewindow.h"

CostSimulator::CostSimulator(AionEnhancingSimulator *parent) : ui(new Ui::CostSimulator)
{
ui->setupUi(this);

parentPtr = parent;
stonePrice = createStonePrice();
connect(ui->aionEnhancingSimulator, SIGNAL(clicked()), this, SLOT(showAionEnhancingSimulatorWindow()));
connect(ui->stonePriceButton, SIGNAL(clicked()), this, SLOT(showStonePriceWindow()));
}

CostSimulator::~CostSimulator()
{
delete ui;
}

void CostSimulator::showAionEnhancingSimulatorWindow()
{
this->hide();
parentPtr->show();
}

QStringList *createStonePrice()
{
QStringList *tmp = new QStringList();

tmp->push_back(QString("80-30000000"));
return (tmp);
}

void CostSimulator::showStonePriceWindow()
{
StonePriceWindow *stonepricewindow = new StonePriceWindow(this);
stonepricewindow->show();
}

QStringList *CostSimulator::getStonePrice()
{
return (stonePrice);
}

およびヘッダー:

#ifndef COSTSIMULATOR_H
#define COSTSIMULATOR_H

#include <QDialog>

#include "aionenhancingsimulator.h"

namespace Ui {
class CostSimulator;
}

class CostSimulator : public QDialog
{
Q_OBJECT

public:
AionEnhancingSimulator *parentPtr;
explicit CostSimulator(AionEnhancingSimulator *parent);
~CostSimulator();

QStringList *stonePrice;

QStringList *createStonePrice();
QStringList *getStonePrice();
void showStonePriceWindow();

public slots:
void showAionEnhancingSimulatorWindow();

private:
Ui::CostSimulator *ui;
};

#endif // COSTSIMULATOR_H

および問題の原因となるウィンドウ:

#include "stonepricewindow.h"
#include "ui_stonepricewindow.h"
#include <QStringListModel>
#include <QStandardItemModel>
#include <QtGui>

StonePriceWindow::StonePriceWindow(CostSimulator *parent) : ui(new Ui::StonePriceWindow)
{
ui->setupUi(this);
displayStonePriceList(parent);
}

StonePriceWindow::~StonePriceWindow()
{
delete ui;
}

void StonePriceWindow::displayStonePriceList(CostSimulator *parent)
{
// To do
}

ヘッダー

#ifndef STONEPRICEWINDOW_H
#define STONEPRICEWINDOW_H

#include <QDialog>

#include "costsimulator.h"

namespace Ui {
class StonePriceWindow;
}

class StonePriceWindow : public QDialog
{
Q_OBJECT

public:
explicit StonePriceWindow(CostSimulator *parent = 0);
~StonePriceWindow();

void displayStonePriceList(CostSimulator *parent);

private:
Ui::StonePriceWindow *ui;
};

#endif // STONEPRICEWINDOW_H

この "StonePriceWindow() {}" を StonePriceWindow のヘッダーに追加した場合、次のエラーが発生します。

助けてくれてありがとう、理由がわかりません。

4

5 に答える 5

1

申し訳ありませんが、ベストアンサーにコメントを追加できませんでした..

私も同様の問題を抱えていました。作成したコードのクラス名と、Qt .ui ファイルのダイアログの objectName プロパティ値との間に不一致があったようです。

QtDesigner で .ui ファイルを開き、objectName プロパティの値をコードで使用したクラス名に変更しました。その後、コンパイルはうまくいきました。

于 2013-09-04T14:14:39.533 に答える
0

問題が見つかりました。StonePrinceWindow.ui には廃止された UI の名前があったため、自動生成された ui_stonepricewindow は廃止された名前を保持し (クリーン後も)、コンパイラは ctor を見つけません。

于 2013-03-15T16:08:11.510 に答える
0

StonePriceWindow(){} を追加して、他のコンストラクタのデフォルト パラメータを削除してみてください。

于 2013-03-13T17:18:10.337 に答える
0

のようなコードを書くと

StonePriceWindow x;

コンパイラーは、パラメーターなしのコンストラクターを呼び出すか、デフォルト値を持つ別のコンストラクターを呼び出すかをどのように認識しますparentか?

もう一方を削除するか、デフォルト値を削除する必要があります。

于 2013-03-13T17:19:25.950 に答える