Qt i SDL, problem z uruchomieniem aplikacji

0

Hej! Mam pewien problem z połączeniem SDL i Qt... Nie wiem czy tak się w ogóle to da zrobić...

W pliku projektu dodałem odpowiednie biblioteki :

#-------------------------------------------------
#
# Project created by QtCreator 2012-09-02T14:20:43
#
#-------------------------------------------------

QT       += core gui

TARGET = Qttest1
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

RESOURCES += \
    zasoby1.qrc

INCLUDEPATH  +=  C:\SDL-1.2.15\include
LIBS  +=  -LC:\SDL-1.2.15\lib\
          -LSDL\
          -lSDLmain
LIBS  +=  -lSDL.dll
win32 {
DEFINES += SDL_WIN
}

kod main.cpp


#include <QtGui/QApplication>
#include <QMessageBox>
#include <SDL/SDL.h>
#include "mainwindow.h"
#define WIDTH 640
#define HEIGHT 480
#define BPP 4
#define DEPTH 32

#undef main

int main(int argc, char *argv[])
{
    QMessageBox msgBox;
    msgBox.setText("1 ");
    msgBox.exec();
    SDL_Surface *screen;

    if(SDL_Init(SDL_INIT_VIDEO)<0) {
        QMessageBox msgBox;
        msgBox.setText("BLAD  ogolny! ");
        msgBox.exec();
      return 1;
    }

    screen=SDL_SetVideoMode(800,600,32,SDL_ANYFORMAT);
    if(screen==NULL) {
        QMessageBox msgBox;
        msgBox.setText("Blad inicjacji video! ");
        msgBox.exec();
      return 1;
    }

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
      SDL_Quit();
    return a.exec();
}

Kompiluje się z ostrzeżeniem
c:\SDL-1.2.15\include\SDL\SDL_main.h:54: ostrzeżenie:"main" redefined
c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtGui\qwindowdefs.h:158: ostrzeżenie:this is the location of the previous definition
ale kompiluje...

Plik SDL.dll skopiowałem do katalogu gdzie jest exe z projektem

Program się uruchamia normalnie, przez chwilę pojawia się okienko konsoli z SLD_App, znika i pojawia się formularz w Qt.
Teraz pytanie : czy da się za pomocą SDL zmienić rozdzielczość dla programu i formularzy w Qt?
Czy pozostaje tylko użycie funkcji Windows API ? Czy da się jakość DirectX połączyć z Qt ?
Czy lepiej nie bawić się w takie mixy i użyć Open GL wbudowanego w Qt ? (tam się da jakoś sterować rozdzielczością i kolorami?) ?

Kod main.cpp

#include <QtGui/QApplication>
#include <QMessageBox>
#include <SDL/SDL.h>
#include <windows.h>
#include "mainwindow.h"
#define WIDTH 640
#define HEIGHT 480
#define BPP 4
#define DEPTH 32

#undef main

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    SDL_Surface *screen;

    if(SDL_Init(SDL_INIT_VIDEO)<0) {
        QMessageBox msgBox;
        msgBox.setText("BLAD Inicjalizacji Video! ");
        MessageBox(NULL, L"Blad inicjalizacji wideo!", L"Blad", MB_ICONERROR);
        msgBox.exec();
      return 1;
    }

    screen=SDL_SetVideoMode(800,600,32,SDL_ANYFORMAT);
    if(screen==NULL) {
        MessageBox(NULL, L"Blad ustawiania trybu wideo!", L"Blad", MB_ICONERROR);
      return 1;
    }

    w.show();
      SDL_Quit();
    return a.exec();
}

Z góry dzięki za odpowiedzi :)

0

Co do tego czy da się połączyć directx i QT odpowiadam ,że da się musisz tylko zdobyć uchwyt okna od programu QT(http://msdn.microsoft.com/en-[...]esktop/ms633499(v=vs.85).aspx). Co do pytania czy da się zmienić rozdzielczość z SDL z poziomu QT odpowiadam:
Po pierwsze to w tym programie co pokazałeś domyslam się ,że tworzysz 2 instacje okna ta od SDL i od QT niby jakim z cudem mógłbyś zmienić okno od QT z SDL skoro to dwie różne instancje. Musiałbyś najpierw wyszukać okno stworzone od QT i jakimś cudem przypisać uchwyt tego okna do instancji SDL musiałbyś poszukać w źródłach SDL jak sie tworzy okno za pomocą SDL_SetVideoSurface i zmodyfikować jakoś ją i ponownie skompilować tak aby wyszukiwała instancje okna od QT. Ale zastanawiam się po co tak w ogóle łączyć SDL i QT. SDL operuje tylko powierzchniami i może je kopiować na ekran lub na inną powierzchnię oraz jest niskopoziomowe. QT ma wieksze możliwości bo obsługuje graikę(sprite itp) oraz GUI. SDL nie posiada tego drugiego więc po co łączyć SDL i QT???

0

No tak to trochę głupota.... Więcej zachodu niż to warte....
Po prostu rozdzielczość zmienię korzystając z funkcji Windows API........

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0