Правильный способ продвижения QTableWidget

Мне нужно иметь собственный qtablewidget, для которого я продвигал встроенный QTableWidget следующим образом:

Только что создал класс с именем Inventory, затем унаследовал его от QTableWidget, добавил qtablewidget в mainwindow из дизайнера qt и повысил его до класса 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);
                                 ^

в файле ui_mainwindow.h на строке

где tableWidget объявляется как Inventory* tableWidget

что случилось ??

Как это исправить?

p.s.

сборка с qt 5.7.1 и qtcreator 4.2.0


person ampawd    schedule 30.10.2017    source источник


Ответы (1)


Я думаю, вы запутались между своим производным классом, основой которого является QTableWidget, и конструктором для вашего производного класса Inventory. Очевидно, что для работы Qt и Qt Editor вам необходимо определить конструктор Inventory::Inventory(QWidget* parent = 0), взяв QWidget в качестве родительского виджета. ( родитель здесь в смысле контейнерного виджета, часто макета). Ваш конструктор принимает QTableWidget*, что кажется мне очень подозрительным, и ваш компилятор говорит вам, что QWdget* не является QTableWidget*, что имеет смысл.

Изменение подписи конструктора Inventory должно сделать работу

person sandwood    schedule 30.10.2017