我想从主窗口创建一个窗口,并向它发送一个指向我主窗口的指针。我做了一次,我会再次这样做,但第二次,我在编译时总是有这个错误"没有合适的默认构造函数"
主窗口:
#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
如果我有这个&#34; StonePriceWindow(){}&#34;在StonePriceWindow的标题中,我有以下错误:&#34;指定了多个默认构造函数&#34;并且总是&#34;没有合适的等等。&#34;
感谢您的帮助,我无法理解原因。
答案 0 :(得分:1)
很抱歉,但我无法在最佳答案中添加评论..
我也遇到了类似的问题,似乎我创建的代码的类名与Qt .ui文件中对话框的objectName属性值不匹配。
我在QtDesigner中打开了.ui文件,并将objectName属性值更改为我在代码中使用的类名。之后编译进展顺利。
答案 1 :(得分:0)
尝试添加StonePriceWindow(){}并删除其他构造函数的默认参数。
答案 2 :(得分:0)
编写
之类的代码时StonePriceWindow x;
编译器如何知道您是否调用无参数构造函数或另一个具有parent
默认值的构造函数?
您需要删除另一个,或从中删除默认值。
答案 3 :(得分:0)
我发现了问题。 在StonePrinceWindow.ui中,有一个过时的UI名称,因此自动生成的ui_stonepricewindow保留了过时的名称(即使在干净之后),编译器也找不到ctor。
答案 4 :(得分:0)
解决方案是更改字符串
#ifndef COSTSIMULATOR_H
#define COSTSIMULATOR_H
在costimulator.h和ui_costsimulator.h两个文件中
Qt在自动生成的ui_costsimulator.h中放置相同的#ifndef #define
表达式