这是我的第一个问题,而且我很吵。我正在使用Qt创建一个偏心观看的软件。一群学生之前做过这个项目,所以我得到了预制代码。
我的问题如下: 我不是通常的编码方式,我使用的是QDesigner。我有一个滚动区域,我想在里面放一些QGroupBox。有一个名为“属性”的常规框,其中包含一些具有垂直布局的其他框。
现在,其中一个框名为“symbolgen”,并使用名为“SymbolGen”的自定义类。该类定义如下:
class SymbolGen : public QGroupBox
现在我想做的是从“属性”框中提取alle box。这意味着:我想用标签“属性”替换组“属性”,并在下面用较小的框替换。现在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.
我在这里看到的是,这个特定的Group Box“symbolgen”(在课堂上有一些重要的变量)需要另一个组合框。那么如何才能将此框分开而没有错误?
感谢您的帮助!
编辑://导致此错误的行:
symbolgen = new SymbolGen(scrollAreaWidgetContents_2);
这个可以在“ui_admin.h”找到。
编辑://“ui_admin.h”中“scrollAreaWidgetContents_2”的定义:
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();
}
答案 0 :(得分:3)
似乎g
只是父窗口小部件,它只是传递给QGroupBox
的构造函数,而且应该是QWidget *而不是QGroupBox *。
您可以在声明中更改它,因为QGroupBox
构造函数无论如何都需要QWidget*
。可能有这样做的原因,因此类可能依赖于父组是组框的事实。不过,我会尝试改变它,看看会发生什么。