您的位置:首页 > 编程语言 > Qt开发

Qt dxlib 调用与简单应用

2015-08-11 16:14 351 查看
百度了很多都没找到,国内很少用这个库的,dxlib作者给出的g++配置不会用,dxlib库是静态库,各个库之间还有调用顺序,qt是动态库,两者共同调用出现各种错误,自己瞎弄了半个多月,才配置好.

qt5.5+vs2010+dxlib库

dxlib库 http://homepage2.nifty.com/natupaji/DxLib/
我是小白,说的好多不对的,这样配置很麻烦,应用时还有好多错误,希望有大神把简单的配置方法告诉一下。

具体配置如下:

1.静态编译qt,这一步最重要,解决动态库与静态库之间的问题,把他们都变成静态库(实在不会写代码正确调用dxlib静态库)

先安装要求的那几个软件,再检测有没有在系统变量中,具体网上有,本人安装了vs版的和mingw,两个版本,运行时找不到qmake,又重新设置了qmake,自学真是处处碰壁

配置的代码,好像少编译了很多,i5的本子用了也就两个小时

configure -confirm-license -opensource -platform win32-msvc2010 -debug-and-release -static -prefix "D:\QT\5.5-static-vs2010" -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug
-no-angle -nomake tests -nomake examples -skip qtwebkit

2.编译完成后在.pro文件中加入库的路径,各个静态库(有顺序!!!!!!!)

LIBS += "C:\Users\Desktop\vsku\Dxlib.lib"

LIBS += "C:\Users\Desktop\vsku\DxDrawFunc_d.lib"

LIBS += "C:\Users\Desktop\vsku\DxLibW_d.lib"

LIBS += "C:\UsersDesktop\vsku\DxUseCLibW_d.lib"

LIBS += "C:\Users\Desktop\vsku\libbulletcollision_vc6_d.lib"

LIBS += "C:\Users\Desktop\vsku\libbulletdynamics_vc6_d.lib"

LIBS += "C:\Users\Desktop\vsku\libbulletmath_vc6_d.lib"

LIBS += "C:\Users\Desktop\vsku\libtiff_d.lib"

LIBS += "C:\Users\Desktop\vsku\libpng_d.lib"

LIBS += "C:\Users\Desktop\vsku\zlib_d.lib"

LIBS += "C:\Users\Desktop\vsku\libjpeg_d.lib"

LIBS += "C:\Users\Desktop\vsku\ogg_static_d.lib"

LIBS += "C:\Users\Desktop\vsku\vorbis_static_d.lib"

LIBS += "C:\Users\Desktop\vsku\vorbisfile_static_d.lib"

LIBS += "C:\Users\Desktop\vsku\libtheora_static_d.lib"

3.最后可以导入并显示pmd,mqo,x,模型,具体调用函数里面有实例

导入的模型在qt下有的不能正常显示,但在vs却可正常显示,不知道怎么处理了,本来想把mmd的模型显示窗口单独出来,再加上一个音乐播放器,实现类似桌面宠物类的功能,再加上一个网站,上传pmd模型和vmd动作数据的这样一个想法,本人技术水平有限,只做出了大体功能,遇到上面的问题,实在不想做了,只能暂时放弃了,有想做的大神带我一下.......................................................

贴上我做的代码:

#ifndef MMMWINDOW_H

#define MMMWINDOW_H


#include <QMainWindow>

#include <QMainWindow>

#include<QDragEnterEvent>

#include<QMimeData>

#include<QDebug>

#include<QMediaPlayer>

#include<QDebug>

#include<QListWidgetItem>

#include<QTime>

#include<QUrl>

#include<QTimer>

#include"modeldisplaywindow.h"




namespace Ui {

class MmmWindow;

}


class MmmWindow : public QMainWindow

{

Q_OBJECT


public:

explicit MmmWindow(QWidget *parent = 0);

~MmmWindow();

protected:


void dragEnterEvent(QDragEnterEvent *e);

void dropEvent(QDropEvent *e);

void getplaytimeandplay();



private slots:

void on_pauseOrplayButton_clicked();


void on_songlistWidget_itemDoubleClicked(QListWidgetItem *item);


void on_nextButton_clicked();


void on_lastButton_clicked();


void on_timeSlider_sliderMoved(int position);


void on_voiceSlider_valueChanged(int value);


void timesliderchange(qint64 value);

void timesliderrange(qint64 value);


void on_modellistWidget_itemDoubleClicked(QListWidgetItem *item);


void on_motionlistWidget_itemDoubleClicked(QListWidgetItem *item);


void on_modeldisplayButton_clicked();


private:

Ui::MmmWindow *ui;

QStringList songlist,modellist,motionlist;

bool playflag;

QMediaPlayer *player;

QListWidgetItem *lastsongitem,*lastmodelitem,*lastmotionitem;

int lastsongnum, lastmodelnum,lastmotionnum;

double interval;

QTimer *test;

QString tempdir,tempdir1,tempdirchange;

ModelDisplayWindow *modelplay1;

int clicknum;

bool modeldisplayflag;

QString a;

QFile *temp;



};


#endif // MMMWINDOW_H


#ifndef MODELDISPLAYWINDOW_H

#define MODELDISPLAYWINDOW_H


#include <QWidget>

#include"DxLib.h"

#include<QString>


class ModelDisplayWindow : public QWidget

{

Q_OBJECT

public:

explicit ModelDisplayWindow(QWidget *parent = 0);



void getmodel(QString modelname);


int ModelHandle, AttachIndex ;

float TotalTime,PlayTime;

void clear();

public slots:

void modelplay();




};


#endif // MODELDISPLAYWINDOW_H


#include "mmmwindow.h"

#include "ui_mmmwindow.h"


MmmWindow::MmmWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MmmWindow)

{

ui->setupUi(this);

player=new QMediaPlayer;

playflag=false;

clicknum=0;

modeldisplayflag=false;

player->setVolume(10);

ui->voiceSlider->setValue(10);

ui->pauseOrplayButton->setIcon(QIcon(":/image/play.ico"));


temp=new QFile;


interval=1000.0/60.0;

lastmodelnum=-1;

lastmotionnum=-1;

lastsongnum=-1;


test=new QTimer;

test->setInterval(interval);


modelplay1=new ModelDisplayWindow();



connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(timesliderchange(qint64)));

connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(timesliderrange(qint64)));

connect(test,SIGNAL(timeout()),modelplay1,SLOT(modelplay()));



}


MmmWindow::~MmmWindow()

{

delete ui;

}

void MmmWindow::dragEnterEvent(QDragEnterEvent *e)

{

if(e->mimeData()->hasUrls())

e->acceptProposedAction();

else e->ignore();

}

void MmmWindow::dropEvent(QDropEvent *e)

{

if(e->mimeData()->hasUrls())

{

QList<QUrl> urls = e->mimeData()->urls();

qDebug() <<urls;

for(int i=0;i< urls.size();i++)

{

if(urls.at(i).toString().right(3) == "mp3")

{

QString qstr = urls.at(i).toString().mid(8,urls.at(i).toString().length() - 8);

songlist += qstr;


ui->songlistWidget->addItem(urls.at(i).fileName());

}


if(urls.at(i).toString().right(3) == "pmd")

{

QString qstr = urls.at(i).toString().mid(8,urls.at(i).toString().length() - 8);

modellist += qstr;


ui->modellistWidget->addItem(urls.at(i).fileName());

}


if(urls.at(i).toString().right(3) == "vmd")

{

QString qstr = urls.at(i).toString().mid(8,urls.at(i).toString().length() - 8);

motionlist += qstr;


ui->motionlistWidget->addItem(urls.at(i).fileName());

}

}

}

if(songlist.size()!=0&&lastsongnum==-1)

{

ui->songlistWidget->setCurrentRow(0);

}

if(modellist.size()!=0&&lastmodelnum!=-1)

{

ui->modellistWidget->setCurrentRow(0);


}

if(motionlist.size()!=0&&lastmotionnum!=-1)

{

ui->motionlistWidget->setCurrentRow(0);

}

}


void MmmWindow::on_pauseOrplayButton_clicked()

{

if(lastsongnum!=-1)

{

if(playflag==false)

{

ui->pauseOrplayButton->setIcon(QIcon(":/image/pause.ico"));

playflag=true;


if(songlist.size()==0)

{


}

else

{

player->play();

test->start();

}

}

else

{

    playflag=false;

player->pause();

test->stop();

   ui->pauseOrplayButton->setIcon(QIcon(":/image/play.ico"));


}

}

}


void MmmWindow::on_songlistWidget_itemDoubleClicked(QListWidgetItem *item)

{



if(lastsongnum==-1)

{

item->setTextColor(QColor(255,0,0));

}

else

{

lastsongitem->setTextColor(QColor(0,0,0));

 item->setTextColor(QColor(255,0,0));

if(modeldisplayflag==true)

 {

      test->stop();

modelplay1->clear();

clicknum++;

ui->modeldisplayButton->setText("显示模型");

 }



}


ui->pauseOrplayButton->setIcon(QIcon(":/image/pause.ico"));



if(playflag==false)

{

playflag=true;

player->setMedia(QMediaContent(songlist.at(ui->songlistWidget->currentRow())));

player->play();

}

else

{

 playflag=true;

 player->pause();

 player->setMedia(QMediaContent(songlist.at(ui->songlistWidget->currentRow())));

 player->play();


}

lastsongitem=item;

lastsongnum=ui->songlistWidget->currentRow();



}



void MmmWindow::on_nextButton_clicked()

{



if(lastsongnum!=-1&&ui->songlistWidget->currentRow()<songlist.size()-1)

{

if(playflag==true)

{


    player->pause();

player->setMedia(QMediaContent(songlist.at(ui->songlistWidget->currentRow()+1)));

ui->songlistWidget->setCurrentRow(ui->songlistWidget->currentRow()+1);

 player->play();

   lastsongitem->setTextColor(QColor(0,0,0));

lastsongitem=ui->songlistWidget->currentItem();

lastsongitem->setTextColor(QColor(255,0,0));


}

else

{

    playflag=true;


ui->pauseOrplayButton->setIcon(QIcon(":/image/pause.ico"));


player->setMedia(QMediaContent(songlist.at(ui->songlistWidget->currentRow()+1)));

ui->songlistWidget->setCurrentRow(ui->songlistWidget->currentRow()+1);

 player->play();

   lastsongitem->setTextColor(QColor(0,0,0));

lastsongitem=ui->songlistWidget->currentItem();

lastsongitem->setTextColor(QColor(255,0,0));


}

    lastsongnum=ui->songlistWidget->currentRow();



}


}


void MmmWindow::on_lastButton_clicked()

{

if(player->media().isNull()==false&&ui->songlistWidget->currentRow()>0)

{

if(playflag==true)

{


    player->pause();

player->setMedia(QMediaContent(songlist.at(ui->songlistWidget->currentRow()-1)));

ui->songlistWidget->setCurrentRow(ui->songlistWidget->currentRow()-1);


  player->play();

   lastsongitem->setTextColor(QColor(0,0,0));

lastsongitem=ui->songlistWidget->currentItem();

lastsongitem->setTextColor(QColor(255,0,0));


}

else

{

    playflag=true;


ui->pauseOrplayButton->setIcon(QIcon(":/image/pause.ico"));


player->setMedia(QMediaContent(songlist.at(ui->songlistWidget->currentRow()-1)));

ui->songlistWidget->setCurrentRow(ui->songlistWidget->currentRow()-1);

  player->play();

   lastsongitem->setTextColor(QColor(0,0,0));

lastsongitem=ui->songlistWidget->currentItem();

lastsongitem->setTextColor(QColor(255,0,0));


}

     lastsongnum=ui->songlistWidget->currentRow();



}



}


void MmmWindow::on_timeSlider_sliderMoved(int position)

{

player->setPosition(position);

if(modeldisplayflag==true)

 {

 test->stop();

getplaytimeandplay();

 }


}


void MmmWindow::on_voiceSlider_valueChanged(int value)

{

player->setVolume(value);

QString str;

ui->voicelabel->setText(str.setNum(ui->voiceSlider->value()));

}

void MmmWindow::timesliderchange(qint64 value)

{


ui->timeSlider->setSliderPosition(value);

QTime duration(0, value / 60000, qRound((value % 60000) / 1000.0));

ui->currenttimelabel->setText(duration.toString("mm:ss"));

}

void MmmWindow::timesliderrange(qint64 value)

{

ui->timeSlider->setMaximum(value);


QTime duration(0, value / 60000, qRound((value % 60000) / 1000.0));

ui->totaltimelabel->setText(duration.toString("mm:ss"));


}


void MmmWindow::on_modellistWidget_itemDoubleClicked(QListWidgetItem *item)

{



if(lastmodelnum!=-1)

{

lastmodelitem->setTextColor(QColor(0,0,0));

item->setTextColor(QColor(255,0,0));

lastmodelitem=item;

lastmodelnum=ui->modellistWidget->currentRow();

}

else

{

item->setTextColor(QColor(255,0,0));

    lastmodelitem=item;

    lastmodelnum=ui->modellistWidget->currentRow();


   if(modeldisplayflag==true)

{

    test->stop();


// tempdir=motionlist.at(lastmotionnum);

tempdir1=modellist.at(ui->modellistWidget->currentRow());

tempdirchange=tempdir1.insert(tempdir1.length()-4,"000");


tempdirchange=tempdirchange.replace(tempdirchange.length()-3,3,"vmd");


temp->copy(tempdir,tempdirchange);


a=modellist.at(lastmodelnum);

modelplay1->getmodel(a);

   getplaytimeandplay();





}




}




}


void MmmWindow::on_motionlistWidget_itemDoubleClicked(QListWidgetItem *item)

{


if(lastmotionnum!=-1)

{

lastmotionitem->setTextColor(QColor(0,0,0));

item->setTextColor(QColor(255,0,0));

lastmotionitem=item;

}

else

{

item->setTextColor(QColor(255,0,0));

    lastmotionitem=item;

}

lastmotionnum=ui->motionlistWidget->currentRow();


tempdir=motionlist.at(lastmotionnum);

tempdir1=modellist.at(lastmodelnum);

tempdirchange=tempdir1.insert(tempdir1.length()-4,"000");


tempdirchange=tempdirchange.replace(tempdirchange.length()-3,3,"vmd");


temp->copy(tempdir,tempdirchange);

}


void MmmWindow::on_modeldisplayButton_clicked()

{


if(clicknum==0)

{

modeldisplayflag=true;


a=modellist.at(lastmodelnum);

modelplay1->getmodel(a);





getplaytimeandplay();


ui->modeldisplayButton->setText("隐藏模型");

}


else if(clicknum%2==1)

{

    modeldisplayflag=false;

modelplay1->clear();

test->stop();


ui->modeldisplayButton->setText("显示模型");



}


else

{

modeldisplayflag=true;

getplaytimeandplay();

ui->modeldisplayButton->setText("隐藏模型");


}

clicknum++;


}

void MmmWindow::getplaytimeandplay()

{


modelplay1->PlayTime=(player->position())/60.0;



test->start();




}


#include "modeldisplaywindow.h"

#include"QDebug"


ModelDisplayWindow::ModelDisplayWindow(QWidget *parent) : QWidget(parent)

{

ChangeWindowMode( true) ;


SetUseBackBufferTransColorFlag( TRUE ) ;


SetAlwaysRunFlag(true);


DxLib_Init();


// MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_REALTIME ) ;

}

void ModelDisplayWindow::getmodel(QString modelname)

{


std::string str=modelname.toStdString();

const char* ch=str.c_str();


ModelHandle = MV1LoadModel( ch ) ;

qDebug()<<ModelHandle;

SetDrawScreen( DX_SCREEN_BACK ) ;


// カメラに映る範囲( カメラからの距離の範囲 )を設定

SetCameraNearFar( 10.0f, 1000.0f ) ;


// カメラの位置と向きを設定

SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 19.0f, -22.5f ), VGet( 0.0f, 10.0f, 0.0f ) ) ;


// 3Dモデルの0番目のアニメーションをアタッチする

AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;


// アタッチしたアニメーションの総再生時間を取得する

TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;

qDebug()<<TotalTime;


// 物理演算の状態をリセット

MV1PhysicsResetState( ModelHandle ) ;


}



void ModelDisplayWindow::modelplay()

{


ClearDrawScreen();


PlayTime += 0.5f ;

qDebug()<<PlayTime;


MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;


MV1PhysicsCalculation( ModelHandle, 1000.0f / 60.0f ) ;


MV1DrawModel( ModelHandle ) ;

ScreenFlip() ;



}


void ModelDisplayWindow::clear()

{

ClearDrawScreen();


ScreenFlip() ;


}


#include "mmmwindow.h"

#include <QApplication>


int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MmmWindow w;

w.show();


return a.exec();

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: