1

matlabからのファイルであるfile.mがあり、qtプロジェクトを実行するときに実行したいと思います。

これが使えることに気づきました-r MATLAB_command - Start MATLAB and execute the MATLAB_command.

この、

-nodesktop           - Do not start the MATLAB desktop. Use the current
                           terminal for commands. The Java virtual machine
                           will be started.

matlabのヘルプからですが、正しい方法を考えているかどうかはわかりません。

私のmain.cpp

#include <QtGui/QApplication>
#include <iostream>
using namespace std;
#include <cmath>

#include <QProcess>
#include "planevolume.h"
#include "dialog.h"

int main(int argc, char *argv[])
{
    // Start MATLAB MAIN.m
    QProcess* p = new QProcess(NULL);
    p->start( QString( "/usr/local/MATLAB/R2011b/bin/matlab"),
              QStringList() << QString("-r /home/matt/Desktop/PlaneVolumeExec/MAIN.m")
                            << QString("-nosplash")
                            << QString("-nodesktop"));

    QApplication app(argc, argv);

    Dialog *dialog= new Dialog;

    if (dialog->exec())
    {
        planevolume mainwindow(dialog->getdirprefix(),dialog->getxpax(), dialog->getypax(), dialog->getzpax(), dialog->getxmmax(), dialog->getymmax(), dialog->getzmmax(), dialog->getintzminp(), dialog->getintzmaxp(), dialog->getintzminm(), dialog->getintzmaxm());
        mainwindow.show();
        return app.exec();
    }

return 0;
}

Matlabヘルプ

/*-h|-help             - Display arguments.
    -n                   - Display final environment variables,
                           arguments, and other diagnostic
                           information. MATLAB is not run.
    -e                   - Display ALL the environment variables and
                           their values to standard output. MATLAB
                           is not run. If the exit status is not
                           0 on return then the variables and values
                           may not be correct.
    -arch                - Start MATLAB assuming architecture arch.
    v=variant            - Start the version of MATLAB found
                           in bin/glnxa64/variant instead of bin/glnxa64.
    v=arch/variant       - Start the version of MATLAB found
                           in bin/arch/variant instead of bin/glnxa64.
    -c licensefile       - Set location of the license file that MATLAB
                           should use.  It can have the form port@host or
                           be a colon separated list of license files.
                           The LM_LICENSE_FILE and MLM_LICENSE_FILE
                           environment variables will be ignored.
    -display Xdisplay    - Send X commands to X server display, Xdisplay.
    -nodisplay           - Do not display any X commands. The MATLAB
                           desktop will not be started. However, unless
                           -nojvm is also provided the Java virtual machine
                           will be started.
    -nosplash            - Do not display the splash screen during startup.
    -mwvisual visualid   - The default X visual to use for figure windows.
    -debug               - Provide debugging information especially for X
                           based problems.
    -desktop             - Allow the MATLAB desktop to be started by a
                           process without a controlling terminal. This is
                           usually a required command line argument when
                           attempting to start MATLAB from a window manager
                           menu or desktop icon.
    -nodesktop           - Do not start the MATLAB desktop. Use the current
                           terminal for commands. The Java virtual machine
                           will be started.
    -nojvm               - Shut off all Java support by not starting the
                           Java virtual machine. In particular the MATLAB
                           desktop will not be started.
    -jdb [port]          - Enable remote Java debugging on port (default 4444)
    -r MATLAB_command    - Start MATLAB and execute the MATLAB_command.
    -logfile log         - Make a copy of any output to the command window
                           in file log. This includes all crash reports.
    -Ddebugger [options] - Start debugger to debug MATLAB.*/
4

4 に答える 4

1
QProcess* p = new QProcess( this );
p->start( "%MATHLAB_EXE_FILE_FULL_PATH%", "%FILE_M_FULL_PATH%" );

したがって、次のようになります。

p->start( QString( "C:/Program Files/MatLab 9.0/matlab.exe" ),
          QStringList() << QString( "-r D:/My files/matlab/file.m" )
                        << QString( "-nosplash" ) );
于 2012-09-11T14:31:51.697 に答える
1

これを試して。できます。

QString program = "C:\\Program Files\\MATLAB\\R2017a\\bin\\matlab.exe";
myProcess->start(program, QStringList() << QString("-nodisplay")<< QString("-nodesktop")<<  QString("-nosplash")<<QString("-r")<<QString("run('C:/Users/eleazar.balbon/Documents/MATLAB/Sample.slx');"));
myProcess->waitForFinished();
于 2017-07-05T01:05:17.780 に答える
0

QProcessがQStringList内のすべてのパラメーターに引用符を追加したため、以下の答えは機能しない可能性があります。QProcess:: setNativeArguments(const QString&arguments)を試してください。

これも機能しない場合は、QProcess :: execute(const QString&program)[static]を試すことができます。

QProcess::execute("My_programm.bin -arg1 val1 -arg2 val2");

これは、コンパイルされていない外部プロセスを実行するための最良の方法だと思います。QProcessインスタンスを作成し、それを手動で削除しない場合は、precesが終了するまでプログラムを実行できます。または、killまたはsomethimgを使用してアプリを終了すると、未完了のプロセスが削除されるというqDebugの問題が発生します(qDebugでこの問題の文字列を覚えておいてください)。別のOSでは、これによりアプリがクラッシュする可能性があります(たとえば、Windows XPでこの問題が発生します)

于 2012-09-11T17:31:57.510 に答える
0

手遅れかもしれません。しかし、将来の参考のために。これはあなたがすべきことです。

私のスクリプトでは、ae_runと呼ばれる私の.mファイルの変数であるパスを送信しています。これが私がやった方法です。

QProcess* p = new QProcess(NULL);
QString matlab_exe ="matlab /r -nosplash -nodesktop";
QString fileName_path=matlab_exe +" "+ "rec_path='"+path+"\';ae_run";
p->start(fileName_path);
qDebug()<<p->state()<<endl;

rec_pathはコードに対して解析する変数であり、fileNameはパスです。最後に、私がそれを実行するとき。このように見えます。

"matlab /r -nosplash -nodesktop rec_path='D:\\robot_IMU_data\\file_data.txt';ae_run"

ご覧のとおり、コマンドラインから実行するようなものです。

于 2017-03-24T17:52:18.963 に答える