推广QTableWidget的正确方式
Correct way of promoting QTableWidget
我需要一个自定义的 qtablewidget,我已经在 QTableWidget
中为其提升了内置功能,如下所示:
刚刚创建了一个名为Inventory
的class,然后从QTableWidget
继承了它,在qt设计器中添加了一个qtablewidget到mainwindow
并将其提升为Inventory
class
//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);
^
在 ui_mainwindow.h
文件中的行
其中 tableWidget
声明为 Inventory* tableWidget
怎么了??
如何解决这个问题?
p.s.
使用 qt 5.7.1 构建
和 qtcreator 4.2.0
我认为您对派生 class 的基础是 QTableWidget 和派生 Inventory class 的构造函数感到困惑。
显然,要使 Qt 和 Qt Editor 正常工作,您需要定义一个
Inventory::Inventory(QWidget* parent = 0)
构造函数,将 QWidget
作为父部件。 (这里的 parent 在容器小部件的意义上,通常是布局)
您的构造函数采用了 QTableWidget*
,这对我来说似乎很可疑,并且您的编译器告诉您 QWdget*
不是 QTableWidget*
,这是有道理的。
更改 Inventory 构造函数的签名应该可以完成工作
我需要一个自定义的 qtablewidget,我已经在 QTableWidget
中为其提升了内置功能,如下所示:
刚刚创建了一个名为Inventory
的class,然后从QTableWidget
继承了它,在qt设计器中添加了一个qtablewidget到mainwindow
并将其提升为Inventory
class
//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);
^
在 ui_mainwindow.h
文件中的行
其中 tableWidget
声明为 Inventory* tableWidget
怎么了??
如何解决这个问题?
p.s.
使用 qt 5.7.1 构建 和 qtcreator 4.2.0
我认为您对派生 class 的基础是 QTableWidget 和派生 Inventory class 的构造函数感到困惑。
显然,要使 Qt 和 Qt Editor 正常工作,您需要定义一个
Inventory::Inventory(QWidget* parent = 0)
构造函数,将 QWidget
作为父部件。 (这里的 parent 在容器小部件的意义上,通常是布局)
您的构造函数采用了 QTableWidget*
,这对我来说似乎很可疑,并且您的编译器告诉您 QWdget*
不是 QTableWidget*
,这是有道理的。
更改 Inventory 构造函数的签名应该可以完成工作