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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Дружественный класс (friend class)  (Прочитано 8644 раз)
ManOfOrange
Гость
« : Январь 31, 2011, 16:25 »

Здравствуйте!

Вопрос скорее по С++, чем по Qt.

есть четыре файлика: timef.h, timef.cpp, leftframe.h и leftframe.cpp - и, соответственно, два класса: timeF и leftFrame. Необходимо сделать класс leftFrame дружественным к timeF для доступа к переменным (private и  protected).
Пишу следующее:

timef.h (с вырезанными кусками, чтобы место не занимать)
Код:
#ifndef TIMEF_H
#define TIMEF_H

#include <QLabel>

#include <QtGui/QFrame>

#include "leftframe.h"

class leftFrame;

namespace Ui {
    class timeF;
}

class timeF : public QFrame {
    Q_OBJECT
    
    friend class leftFrame;

public:
    timeF(QWidget *parent = 0);
    ~timeF();

protected:
    
    void paintEvent (QPaintEvent *event);

private:
    Ui::timeF *m_ui;

    //Переменные
    QString header;
};

#endif // TIMEF_H

leftFrame.h
Код:
#ifndef LEFTFRAME_H
#define LEFTFRAME_H


#include "timef.h"
#include <QWidget>

class timeF;

class leftFrame : public QWidget
{
public:
    leftFrame(QWidget *parent=0);

protected:
    void paintEvent(QPaintEvent* event);

private:
    int leftCoordX;
};

#endif // LEFTFRAME_H

leftframe.cpp
Код:
#include "leftframe.h"

#include <qpainter.h>
#include "timef.h"

class timeF;

leftFrame::leftFrame(QWidget* parent)
{
}

void leftFrame::paintEvent(QPaintEvent*)
{
    QPainter painter(this);

    painter.drawText(header);

     painter.end();
}

Соответственно, ругается и не собирается.
`header' undeclared (first use this function)

Подскажите, пожалуйста, что сделано не так и где исправить :-)
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Январь 31, 2011, 16:37 »

В timef.h добавить
Код:
#include <QString>
Записан
ManOfOrange
Гость
« Ответ #2 : Январь 31, 2011, 16:45 »

Добавил. Ничего не изменилось.
Записан
SABROG
Гость
« Ответ #3 : Январь 31, 2011, 16:46 »

В timef.h добавить
Код:
#include <QString>
Думаю дело в другом. У него член класса header находится в классе timeF, который наследует QFrame. Но класс leftFrame почему-то наследует QWidget, в котором, естественно, нет члена header.
Записан
ManOfOrange
Гость
« Ответ #4 : Январь 31, 2011, 17:03 »

О, проблему решил. Я затупил, пытаясь использовать переменные, не юзая объект класса timeF...

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


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