crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Помогите разобраться как правильно бы унаследоваться., Вообщем шаблоное что наверно
maxvanceffer
  опции профиля:
сообщение 20.12.2009, 18:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Стоит вот такая задача :
У меня в программе есть несколько так называемых страничек (WidgetPage) их класс унаследован от QWidget , так вот у них одинаковые функции и задачи в принципе.
Управляет ими класс PageManager, каждая из страничек унаследована от класса Page который содержит информацию необходимою для PageManager. И тут вот такая загвоздка хочу использовать сигналы и слоты в классе Page. Но получаеться что QObject должен быть только у одного из базового класса .

В структура для нагладности :
// Так наследуеться странички
WidgetPage:public QWidget,public Page{....};

//А в манагере страничек хотелось бы регестрировать странички для упровления ими вот таким способом
void PageManager::register(Page *ptr){
connect(ptr,SIGNAL(NeedData()),this,SLOT(giveData));
}

Вообщем двумя словами как сделать бы так чтоб у всех строничек сто пудов были одни и тежи сигналы и слоты (естественно при правильном наследовании) .....

Первое что приходит на ум это унаследовать Page от QWidget а уже потом WidgetPage:public Page . И вопрос правильно ли это будет ?

Сообщение отредактировал maxvanceffer - 20.12.2009, 18:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.12.2009, 19:06
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(maxvanceffer @ 20.12.2009, 21:52) *
Но получаеться что QObject должен быть только у одного из базового класса
К сожалению, я тоже наткнулся на это ограничение в Qt.
Только обходить, например вот какой вопрос: Нужно ли наследоватся от QWidget для конкретной страницы?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 20.12.2009, 19:20
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да в принципе нет наверно. Просто они у меня отображаются в QStackedWidget а он может в принципе отображать и QDialog, QWidget и т.д.

Но для заказчика для каждой странички так или и наче нужен ui файл чтоб он сам там мог ковыряться.

Сообщение отредактировал maxvanceffer - 20.12.2009, 19:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 20.12.2009, 20:04
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Litkevich Yuriy @ 20.12.2009, 19:06) *
Цитата(maxvanceffer @ 20.12.2009, 21:52) *
Но получаеться что QObject должен быть только у одного из базового класса
К сожалению, я тоже наткнулся на это ограничение в Qt.
Только обходить, например вот какой вопрос: Нужно ли наследоватся от QWidget для конкретной страницы?

а если виртуальное наследование? QObject один будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 20.12.2009, 20:25
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Это как ? Обьясни подробней ! Кто от кого ?
Вот тут еще кое что пришло на ум а если просто вставить Q_OBJECT макрос в начало класса Page заработают сигналы и слоты ?

Сообщение отредактировал maxvanceffer - 20.12.2009, 20:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 20.12.2009, 20:59
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


так если правильно понял что надо:
WidgetPage: virtual public QWidget, virtual public Page{....};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 20.12.2009, 21:05
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(DEADHUNT @ 20.12.2009, 20:59) *
так если правильно понял что надо:
WidgetPage: virtual public QWidget, virtual public Page{....};

Насколько я помню, виртуальное наследование это нечто вроде:
class A : public virtual QObject
{
};

class B : public virtual QObject
{
};

class C : public A, public B
{
};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 20.12.2009, 21:24
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


да ошибся, и этот код это подтверждает
#include <iostream>
#include <iomanip>

class A {
    public:
        int a;
};

class B : public A {
    int b;
};

class C : public A {
    int c;
};

class D: virtual public B, virtual public C {
    public:
        D()
        {
            std::cout << std::hex << &(B::a) << "\t" << &(C::a);
        }
};

int main()
{
    D d;
    return 0;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 20.12.2009, 21:32
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(maxvanceffer @ 20.12.2009, 18:52) *
Управляет ими класс PageManager, каждая из страничек унаследована от класса Page который содержит информацию необходимою для PageManager. И тут вот такая загвоздка хочу использовать сигналы и слоты в классе Page. Но получаеться что QObject должен быть только у одного из базового класса .

В структура для нагладности :
// Так наследуеться странички
WidgetPage:public QWidget,public Page{....};

А если сделать так:
class Page : public QWidget
{
    Q_OBJECT
public:
    ...
};

class WidgetPage : public Page
{
    Q_OBJECT
public:
    ...
};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.12.2009, 21:43
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(BRE @ 21.12.2009, 0:05) *
Насколько я помню, виртуальное наследование это нечто вроде:
, я тоже так думаю.
Но есть замечание:
Цитата
Virtual inheritance with QObject is not supported.
тык
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 22:03