0

这是我的第一个问题,我很挣扎。我正在使用 Qt 创建一个用于偏心查看的软件。以前有一群学生做过这个项目,所以我得到了预先制作的代码。

我的问题是以下一个:我没有按照通常的方式编码,我使用的是 QDesigner。我有一个滚动区域,我想在其中放置一些 QGroupBoxes。有一个名为“Properties”的通用框,其中包含一些其他具有垂直布局的框。

现在其中一个框被称为“symbolgen”,并且正在使用一个名为“SymbolGen”的自定义类。该类定义如下:

class SymbolGen : public QGroupBox

现在我喜欢做的是从“属性”框中提取所有框。这意味着:我想用标签“属性”替换组“属性”,并在下面用较小的框。现在 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”(在类中包含一些重要的变量)需要另一个组框。那么我怎样才能让这个盒子没有错误地分开呢?

谢谢你的帮助!

编辑://导致此错误的行:

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));

编辑://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();
}
4

1 回答 1

4

它似乎g只是父小部件,它只是传递给 的构造函数QGroupBox,并且应该是 QWidget* 而不是 QGroupBox* 类型。

您可以在声明中更改它,因为QGroupBox构造函数QWidget*无论如何都需要 a 。这样做可能是有原因的,因此该类可能依赖于父级是组框这一事实。不过,我会尝试改变它,看看会发生什么。

于 2016-06-21T12:14:32.777 回答