无法从 "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 可能依赖于父级是一个组框这一事实。不过,我会尝试更改它,看看会发生什么。