0

我想从主窗口创建一个窗口,并向它发送一个指向我的主窗口的指针。我做了一次,我会再做一次,但是第二次,我总是在编译时出现这个错误“没有合适的默认构造函数可用”

主窗口:

#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

尝试添加 StonePriceWindow(){} 并删除其他构造函数的默认参数。

于 2013-03-13T17:18:10.337 回答
0

当您编写类似的代码时

StonePriceWindow x;

编译器如何知道您是调用无参数构造函数还是另一个具有默认值的构造函数parent

您需要删除另一个,或从中删除默认值。

于 2013-03-13T17:19:25.950 回答
0

我发现了问题。在 StonePrinceWindow.ui 中,有一个过时的 UI 名称,因此自动生成的 ui_stonepricewindow 保留过时的名称(即使在清理之后),编译器永远找不到 ctor。

于 2013-03-15T16:08:11.510 回答
0

解决方案是更改字符串

#ifndef COSTSIMULATOR_H
#define COSTSIMULATOR_H

在文件 costsimulator.h 和 ui_costsimulator.h 中的任何一个中

Qt#ifndef #define在自动生成的 ui_costsimulator.h 中放置相同的表达式

于 2018-11-08T21:50:53.750 回答