crossplatform.ru

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

> Виртуальные функции и connect
Ponter
  опции профиля:
сообщение 4.6.2012, 15:27
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 4.3.2010
Пользователь №: 1504

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




Репутация:   0  


Всем привет. Есть код:
class Main
{
    public:
        Main();
    public slots:
        virtual void add() = 0;
};

class A : public Main
{
    public:
        A();
    public slots:
        void add();
};

class B : public Main
{
    public:
        B();
    public slots:
        void add();
};


Далее в некоем классе я пишу:
{
    Main *main = new Main();
    main = a;
    
    connect(this, SIGNAL(sgMainSignal()), main, SLOT(add()));
    
    A *a = new A();
    main = a;
    main->add(); //вызовет судя по виртуальным функциям A->add()
}

И вот тут встает вопрос: почему при connect вызывается слот класса Main, хотя указатель уже указывает на класс A?
Это решается новой записью, т.е.
A *a = new A();
main = a;
connect(this, SIGNAL(sgMainSignal()), main, SLOT(add()));
Но тогда другой вопрос: что будет если при каждой смене указателя (то на А, то на В) буду писать connect и считается ли это хорошим тоном?
Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 5.6.2012, 11:17
Сообщение #2


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


сделай так: тебе нужно написать некий класс

class QMyPanel:QWidget
{
    Q_OBJECT
public:
    QMyPanel(QWidget* parent);

    enum ee_button
    {
        e_button_1,
        e_button_2,
        e_button_3,
    };

    typedef std::map<ee_button, QWidget*> td_buttons;

    td_buttons m_buttons;//массив кнопок

};

QMyPanel::QMyPanel(QWidget* parent):QWidget(parent)
{
    //
}


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

Сообщение отредактировал Алексей1153 - 5.6.2012, 11:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




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