Russian Qt Forum

Qt => Общие вопросы => Тема начата: sindbad07 от Август 10, 2010, 14:46



Название: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: sindbad07 от Август 10, 2010, 14:46
Хочу сделать промежуточный (чисто виртуальный) класс на основе QWidget (QTabWidget), который будет служить основой для разного рода редакторов.

Делаю так:

class objectEditor: public QTabWidget
{
    Q_OBJECT
public:
    objectEditor( QWidget * parent ) :
            QTabWidget( parent ) {}
public slots:
    virtual void saveChanges();
    virtual void closeEditor();
};


class someEditor: public objectEditor
{
    Q_OBJECT
public:
    someEditor( QWidget * parent = 0 ) :
             objectEditor( parent ) {}
public slots:
    void closeEditor();
    void saveChanges();
};

В итоге collect2 посылает меня далеко-далеко, без всяких разъяснений, неужели нельзя так делать, ведь известно, что все редакторы долны быть виджетами? Если можно, то поскажите как сделать правильно. Спасибо.

П.С. пробую наследоваться от QTabWidget как protected, но в этом случае QWidget становится не доступен в someEditor.


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: lit-uriy от Август 10, 2010, 14:55
>>В итоге collect2 посылает меня далеко-далеко
а подробнее


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: kuzulis от Август 10, 2010, 14:58
Код:
class objectEditor: public QTabWidget
{
    Q_OBJECT
public:
    objectEditor( QWidget * parent = 0 );
    virtual ~objectEditor();

public slots:
    virtual void saveChanges() = 0;
    virtual void closeEditor() = 0;
};


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: sindbad07 от Август 10, 2010, 15:01
>>В итоге collect2 посылает меня далеко-далеко
а подробнее
при сборке говорит только это :-1: error: collect2: ld returned 1 exit status
пробовал и в линуксе собирать и винде и проект новый создавать один фиг посылает


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: sindbad07 от Август 10, 2010, 15:03
Код:
class objectEditor: public QTabWidget
{
    Q_OBJECT
public:
    objectEditor( QWidget * parent = 0 );
    virtual ~objectEditor();

public slots:
    virtual void saveChanges() = 0;
    virtual void closeEditor() = 0;
};
Спасибо, щас попробую так


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: kuzulis от Август 10, 2010, 15:21
sindbad07,

держи пример (в аттаче)



Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: sindbad07 от Август 10, 2010, 15:31
sindbad07,

держи пример (в аттаче)


Спасибо большое, видимо я h файл с определенным в нем конструктором в несколько cpp подключил, потому что сделел как у тебя, все равно шляпа :) Щас попробую вынести пустые конструкторы с деструкторами в отдельный cpp


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: kuzulis от Август 10, 2010, 15:41
На тебе по разным *.h и *.cpp
 (в аттаче)


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: lit-uriy от Август 10, 2010, 16:37
>>при сборке говорит только это :-1: error: collect2: ld returned 1 exit status
а до этих строк было описание проблем, а это всего лишь резюме.


Название: Re: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?
Отправлено: sindbad07 от Август 10, 2010, 17:00
Ошибка была в том, что я не определил в срр файле производного класса одну из наследуемых (виртуальных) функций (closeEditor), на что qtcreator выдал мне безликое сообщение, чем я сильно огорчен, потому что за 4 часа битвы с ним чуть не сломал себе мозг :)

Спасибо за примеры, они мне очень помогли.