正确推广QTableWidget的方法

时间:2017-10-30 20:08:27

标签: qt qt5 qwidget qtablewidget

我需要有一个自定义的qtablewidget,我已在QTableWidget内置了如下内容:

刚刚创建了一个名为Inventory的类,然后从QTableWidget继承了它,将qtablewidget从qt设计器添加到mainwindow并将其提升为Inventory

//inventory.h
#ifndef INVENTORY_H
#define INVENTORY_H    
#include <QTableWidget>

class Inventory : public QTableWidget
{

public:
    Inventory(QTableWidget* parent = 0);
};

#endif // INVENTORY_H


//inventory.cpp
#include "inventory.h"    
Inventory::Inventory(QTableWidget *parent)
    : QTableWidget(parent)
{
    setRowCount(3);
    setColumnCount(3);

    horizontalHeader()->setDefaultSectionSize(160);
    verticalHeader()->setDefaultSectionSize(160);
}

但由于某种原因,它只是赢得了正确的构建,而是抛出了这个:

error: invalid conversion from ‘QWidget*’ to ‘QTableWidget*’ [-fpermissive]
         tableWidget = new Inventory(centralWidget);
                                 ^

在<{p>}行的ui_mainwindow.h文件中

其中tableWidget被声明为Inventory* tableWidget

有什么不对?

如何解决这个问题?

P.S。

使用qt 5.7.1构建 和qtcreator 4.2.0

1 个答案:

答案 0 :(得分:1)

我认为你的派生类是基于QTableWidget和派生的Inventory类的构造函数之间的混淆。 显然,对于Qt和Qt编辑器来说,你需要定义一个 Inventory::Inventory(QWidget* parent = 0) 构造函数,将QWidget作为父窗口小部件。 (父元素在容器小部件的意义上,通常是一个布局) 您的构造函数正在使用QTableWidget*,这对我来说似乎非常可疑,并且您的编译器告诉您QWdget*不是QTableWidget*,这是有道理的。

更改Inventory构造函数的签名应该生成作业