无法从 "QWidget *" 的参数 1 转换为 "QGroupBox *"
Conversion from argument 1 of "QWidget *" to "QGroupBox *" not possible
这是我的第一个问题,我很纠结。我正在使用 Qt 创建用于偏心观察的软件。一群学生以前做过这个项目,所以我得到了预制代码。
我的问题如下:
我没有以通常的方式编码,我使用 QDesigner。我有一个滚动区域,我想在其中放置一些 QGroupBoxes。有一个名为 "Properties" 的通用框,其中包含一些其他垂直布局的框。
现在其中一个盒子叫做 "symbolgen" 并且正在使用自定义的 class,叫做 "SymbolGen"。 class 定义如下:
class SymbolGen : public QGroupBox
现在我喜欢做的是从 "Properties" 框中提取等位基因框。这意味着:我想用标签 "Properties" 替换组 "Properties" 并在下面用较小的框替换。现在 Qt 对我说的是:
Fehler: C2664: "SymbolGen::SymbolGen(const SymbolGen &)" : Konvertierung von Argument 1 von "QWidget *" in "QGroupBox *" nicht m”glich
是的,我是德国人,英语:
Error: C2664: "SymbolGen::SymbolGen(const SymbolGen &)" : Conversion from argument 1 of "QWidget *" to "QGroupBox *" not possible.
我在这里看到的是,这个特定的组框 "symbolgen"(在 class 中包含一些重要变量)需要 周围的另一个组框。那么我怎样才能把这个盒子准确无误地分开呢?
感谢您的帮助!
编辑://导致此错误的行:
symbolgen = new SymbolGen(scrollAreaWidgetContents_2);
这个可以在 "ui_admin.h" 找到。
edit://"scrollAreaWidgetContents_2" 来自 "ui_admin.h" 的定义:
scrollAreaWidgetContents_2 = new QWidget();
scrollAreaWidgetContents_2->setObjectName(QStringLiteral("scrollAreaWidgetContents_2"));
scrollAreaWidgetContents_2->setGeometry(QRect(0, 0, 503, 851));
edit://SymbolGen::SymbolGen(const SymbolGen &):
SymbolGen::SymbolGen(QGroupBox *g) : QGroupBox(g)
{
srand (time(NULL));
//Wörterquelle lesen
std::ifstream f("source/ngerman.txt");
std::string l;
if(f.is_open())
{
while(f.good())
{
getline(f,l);
words.push_back(l);
//if( words.size() > 10000 ) break;
}
}
f.close();
//Satzquelle lesen
std::ifstream fs("source/sentences.txt");
//std::string l;
if(fs.is_open())
{
while(fs.good())
{
getline(fs,l);
phrase.push_back(l);
//if( words.size() > 10000 ) break;
}
}
fs.close();
}
似乎g
只是父控件,它只是传递给QGroupBox
的构造函数,并且应该是QWidget*类型而不是QGroupBox*类型。
您可以在声明中更改它,因为 QGroupBox
构造函数无论如何都需要 QWidget*
。这样做可能是有原因的,所以 class 可能依赖于父级是一个组框这一事实。不过,我会尝试更改它,看看会发生什么。
这是我的第一个问题,我很纠结。我正在使用 Qt 创建用于偏心观察的软件。一群学生以前做过这个项目,所以我得到了预制代码。
我的问题如下: 我没有以通常的方式编码,我使用 QDesigner。我有一个滚动区域,我想在其中放置一些 QGroupBoxes。有一个名为 "Properties" 的通用框,其中包含一些其他垂直布局的框。
现在其中一个盒子叫做 "symbolgen" 并且正在使用自定义的 class,叫做 "SymbolGen"。 class 定义如下:
class SymbolGen : public QGroupBox
现在我喜欢做的是从 "Properties" 框中提取等位基因框。这意味着:我想用标签 "Properties" 替换组 "Properties" 并在下面用较小的框替换。现在 Qt 对我说的是:
Fehler: C2664: "SymbolGen::SymbolGen(const SymbolGen &)" : Konvertierung von Argument 1 von "QWidget *" in "QGroupBox *" nicht m”glich
是的,我是德国人,英语:
Error: C2664: "SymbolGen::SymbolGen(const SymbolGen &)" : Conversion from argument 1 of "QWidget *" to "QGroupBox *" not possible.
我在这里看到的是,这个特定的组框 "symbolgen"(在 class 中包含一些重要变量)需要 周围的另一个组框。那么我怎样才能把这个盒子准确无误地分开呢?
感谢您的帮助!
编辑://导致此错误的行:
symbolgen = new SymbolGen(scrollAreaWidgetContents_2);
这个可以在 "ui_admin.h" 找到。
edit://"scrollAreaWidgetContents_2" 来自 "ui_admin.h" 的定义:
scrollAreaWidgetContents_2 = new QWidget();
scrollAreaWidgetContents_2->setObjectName(QStringLiteral("scrollAreaWidgetContents_2"));
scrollAreaWidgetContents_2->setGeometry(QRect(0, 0, 503, 851));
edit://SymbolGen::SymbolGen(const SymbolGen &):
SymbolGen::SymbolGen(QGroupBox *g) : QGroupBox(g)
{
srand (time(NULL));
//Wörterquelle lesen
std::ifstream f("source/ngerman.txt");
std::string l;
if(f.is_open())
{
while(f.good())
{
getline(f,l);
words.push_back(l);
//if( words.size() > 10000 ) break;
}
}
f.close();
//Satzquelle lesen
std::ifstream fs("source/sentences.txt");
//std::string l;
if(fs.is_open())
{
while(fs.good())
{
getline(fs,l);
phrase.push_back(l);
//if( words.size() > 10000 ) break;
}
}
fs.close();
}
似乎g
只是父控件,它只是传递给QGroupBox
的构造函数,并且应该是QWidget*类型而不是QGroupBox*类型。
您可以在声明中更改它,因为 QGroupBox
构造函数无论如何都需要 QWidget*
。这样做可能是有原因的,所以 class 可能依赖于父级是一个组框这一事实。不过,我会尝试更改它,看看会发生什么。