Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 20:59   #1
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию Вызов рисующих методов сцены из подпрограммы.

Вообщем у меня класс QGraphicsScene.
И мне нужно вызвать его отрисовывающие методы из подпрограммы(У меня они по разным файлам распиханы.)
Я пробовал подключать через заголовочный файл. Через операцию :: Пробовал. И чего-то меня компилятор лесом посылает.

Тоесть вот моя сцена:
Цитата:
//== *myScene.cpp *=============
class myScene : public QGraphicScene
{ *...
* *...
*public:
* *void drawItem(); //вот моя рисовалка
};
//===========================
Дальше я в
//== *main.cpp *================
int main()
{
myForm -> show
podprogramka(); * *//И тут я из подпрограмки хочу вызвать рисовательный метод сцены
return app.exec()
}
//===========================
Как это можно реализовать?
jojahti вне форума Ответить с цитированием
Старый 19.08.2009, 21:52   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от jojahti Посмотреть сообщение
Как это можно реализовать?
Прочитать принципы ООП и понять, что метод класса можно вызвать только имея объект данного класса. Нельзя же сказать: собака.фас! ибо че за собака эту команду должна выполнить - непонятно. Так что в подпрограмме заводите объект данного класса и вызывайте у него этот метод.
Можно еще объявить метод статическим (ключевое слово static) и вызывать его так:
myScene:rawItem();
pu4koff вне форума Ответить с цитированием
Старый 19.08.2009, 22:29   #3
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

pu4koff
Цитата:
Прочитать принципы ООП и понять, что метод класса можно вызвать только имея объект данного класса.
Ну слоты к примеру и так фурычат.

Я и из объекта пробовал - не фурычит.
А можно весь код покажу?
jojahti вне форума Ответить с цитированием
Старый 19.08.2009, 22:35   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от jojahti Посмотреть сообщение
А можно весь код покажу?
Конечно. Даже нужно
pu4koff вне форума Ответить с цитированием
Старый 20.08.2009, 09:22   #5
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

pu4koff
Цитата:
Конечно. Даже нужно
Ооо!! Пасиб!

Ну весь я не знаю. Чего-то он там уже в12ти файлах и мутантский, если честно.

Дело в том, что я написал програмку, с объектной структурой, в нескольких файлах. Отображение у неё раньше текстовое было. А теперь мне нужно вместо символов текстовых вызывать методы моей сцены. А вот как это сделать? На этом я и завис.
Хелп ми плиз

Вообщем вот минимальный пример:
//=================================== ===
myform.h //заголовочный файл для формы.
Код:
#ifndef MYFORM_H
#define MYFORM_H

#include <QMainWindow>
#include "ui_mainform.h"

class MyScene;
class MyForm : public QMainWindow, public Ui::MainWindow
{ Q_OBJECT
public:
   MyForm(QWidget *parent = 0);
private:
   MyScene *scene;
};
#endif
//=================================== ===
myform.cpp //Конструктор для формы, пихает сцену в соответствующий виджет
Код:
#include "myscene.h"
#include "myform.h"

MyForm::MyForm(QWidget *parent) : QMainWindow(parent)
{
  setupUi(this);
  scene = new MyScene;
  graphicsView->setScene(scene);
}
//=================================
myscene.h // заголовочный файл для сцены
Код:
#ifndef MYSCENE_H
#define MYSCENE_H

#include <QGraphicsScene>
class MyScene : public QGraphicsScene
{ Q_OBJECT
  public:
    MyScene(QObject *parent=0);
    void crRect();   // пример отрисовывающего метода
  protected:
  private:
};
#endif
//============================
myscene.cpp // ну это понятно что
Код:
#include <QKeyEvent>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsItem>
#include <QtCore>
#include "myscene.h"

MyScene::MyScene(QObject *parent) : QGraphicsScene(parent)
{

}

void MyScene::crRect() // вот наш квадратик
{
 QGraphicsItem *item;
 item = addRect(10, 10, 20, 20);
}
//==========================
main.cpp // ну это маин.
Код:
#include <QApplication>
#include "myform.h"
#include "podprog.h"

int main(int argc, char **argv) {
  QApplication app(argc, argv);
  MyForm *window = new MyForm;
  window->show();
  runprog();        // вот она!! Подпрограмма!!!
  return app.exec();

}
//==========================
podprog.h // присоединялка
Код:
#ifndef PROCESOR_H
#define PROCESOR_H

void runprog();


#endif
//===================
podprog.cpp // Подпрограммка
Код:
#include "podprog.h"
void runprog()
{
// Здесь я хочу вызвать - crRect(); но незнаю как. ((
}

Последний раз редактировалось jojahti; 20.08.2009 в 09:27.
jojahti вне форума Ответить с цитированием
Старый 20.08.2009, 09:28   #6
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

(в прошлый пост нельзя это вставить, т.к. движок форума ругается)
ui_mainform.cpp //ну и собственно сама форма на всякий случай, хотя тут вроде ничего криминального быть не должно.
Код:
/********************************************************************************
** Form generated from reading ui file 'mainform.ui'
**
** Created: Tue Aug 18 22:52:26 2009
**      by: Qt User Interface Compiler version 4.5.0
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_MAINFORM_H
#define UI_MAINFORM_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGraphicsView>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QStatusBar>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralwidget;
    QVBoxLayout *vboxLayout;
    QGraphicsView *graphicsView;
    QMenuBar *menubar;
    QStatusBar *statusbar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(614, 399);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        vboxLayout = new QVBoxLayout(centralwidget);
#ifndef Q_OS_MAC
        vboxLayout->setSpacing(6);
#endif
#ifndef Q_OS_MAC
        vboxLayout->setMargin(9);
#endif
        vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
        graphicsView = new QGraphicsView(centralwidget);
        graphicsView->setObjectName(QString::fromUtf8("graphicsView"));

        vboxLayout->addWidget(graphicsView);

        MainWindow->setCentralWidget(centralwidget);
        menubar = new QMenuBar(MainWindow);
        menubar->setObjectName(QString::fromUtf8("menubar"));
        menubar->setGeometry(QRect(0, 0, 614, 26));
        MainWindow->setMenuBar(menubar);
        statusbar = new QStatusBar(MainWindow);
        statusbar->setObjectName(QString::fromUtf8("statusbar"));
        MainWindow->setStatusBar(statusbar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "Movig Objects", 0, QApplication::UnicodeUTF8));
        Q_UNUSED(MainWindow);
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINFORM_H
jojahti вне форума Ответить с цитированием
Старый 20.08.2009, 11:50   #7
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Эмммм. Кхе-кхе.
Вот:
scene = window->scene
И я целый день вчера парился. :WALL: :WALL: :WALL:
jojahti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов методов объекта из функции? jojahti Общие вопросы C/C++ 3 03.08.2009 16:57
Использование методов вне класса prikolist Общие вопросы C/C++ 12 07.05.2009 13:57
наследование методов TaTT DoGG Общие вопросы .NET 4 27.02.2009 01:27