Russian Qt Forum
Ноябрь 23, 2024, 10:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как правильно определить виртуальный класс на основе QWidget (QTabWidget)?  (Прочитано 4554 раз)
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.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Август 10, 2010, 14:55 »

>>В итоге collect2 посылает меня далеко-далеко
а подробнее
Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Август 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;
};
Записан

ArchLinux x86_64 / Win10 64 bit
sindbad07
Гость
« Ответ #3 : Август 10, 2010, 15:01 »

>>В итоге collect2 посылает меня далеко-далеко
а подробнее
при сборке говорит только это :-1: error: collect2: ld returned 1 exit status
пробовал и в линуксе собирать и винде и проект новый создавать один фиг посылает
Записан
sindbad07
Гость
« Ответ #4 : Август 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;
};
Спасибо, щас попробую так
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Август 10, 2010, 15:21 »

sindbad07,

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

Записан

ArchLinux x86_64 / Win10 64 bit
sindbad07
Гость
« Ответ #6 : Август 10, 2010, 15:31 »

sindbad07,

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


Спасибо большое, видимо я h файл с определенным в нем конструктором в несколько cpp подключил, потому что сделел как у тебя, все равно шляпа Улыбающийся Щас попробую вынести пустые конструкторы с деструкторами в отдельный cpp
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Август 10, 2010, 15:41 »

На тебе по разным *.h и *.cpp
 (в аттаче)
Записан

ArchLinux x86_64 / Win10 64 bit
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Август 10, 2010, 16:37 »

>>при сборке говорит только это :-1: error: collect2: ld returned 1 exit status
а до этих строк было описание проблем, а это всего лишь резюме.
Записан

Юра.
sindbad07
Гость
« Ответ #9 : Август 10, 2010, 17:00 »

Ошибка была в том, что я не определил в срр файле производного класса одну из наследуемых (виртуальных) функций (closeEditor), на что qtcreator выдал мне безликое сообщение, чем я сильно огорчен, потому что за 4 часа битвы с ним чуть не сломал себе мозг Улыбающийся

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

 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.196 секунд. Запросов: 22.