作ったスクリプトを呼び出すガワを作る
スクリプトだけだとアプリケーションにならないので呼び出してくれるガワを作りました。
導入
- Qtをインストーラー経由で入れる
- Qt Creator起動
- 「新しいプロジェクト」→「Qtウィジェットアプリケーション」
- 「無題」だと怒られるので適当にアルファベットで名前をつける。取り敢えず「gawa_sample」
普通に入れててVS入ってない場合はMinGWだけのはずですが、VSしたい場合はチェック(デバッグ用のWindowsSDK入れないとデバッガが無いと怒られました)
残りは「次へ」→「完了」
ボタンを乗っけてslot追加
「フォーム」→「mainwindow.ui」をダブルクリック
こんな感じのはずなので、「Push Button」をドラックしてドロップ
追加したボタンで右クリックして「スロットへ移動」
clicked()でOK。
VBScriptを呼び出す
地味に大変。COMのスクリプトを呼び出すのはQAxScriptManagerとQAxScriptを使うそうで、、、
QAxScriptManager Class | Active Qt 5.7
mainwindow.hを↓(addが追加部分)
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QAxScriptEngine> //add #include <QAxScript> //add #include <QDebug> //add namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; QString getArtworkPath(); //add void nextTrack(); //add QAxScriptManager *m_manager; //add QAxScript *m_script; //add }; #endif // MAINWINDOW_H
mainwindow.cppも↓な感じにいじる
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { /* add (ここから) */ m_manager = new QAxScriptManager(this); bool isRegistered = m_manager->registerEngine("VBScript", "vbs"); if(isRegistered){ qDebug() << "OK to register VBScript"; m_script = m_manager->load("C:\\msys64\\home\\adachi\\test.vbs", "HelloWorld"); } else qDebug() << "NG to register VBScript"; /* add (ここまで) */ ui->setupUi(this); } MainWindow::~MainWindow() { /* add (ここから) */ if(m_script) delete m_script; if(m_manager) delete m_manager; /* add (ここまで) */ delete ui; } /* add (ここから) */ QString MainWindow::getArtworkPath() { QString rStr = ""; if (m_script){ QVariant var = m_script->call("getArtworkAndPath()"); qDebug() << var.toString() << "loaded"; rStr = var.toString(); qDebug() << "rstr = " << rStr; } else qDebug() << "didn't load"; return rStr; } void MainWindow::nextTrack() { if (m_script){ m_script->call("nextTrack()"); qDebug() << "loaded"; } else qDebug() << "didn't load"; } /* add (ここまで) */ void MainWindow::on_pushButton_clicked() { /* add (ここから) */ QString path; nextTrack(); path = getArtworkPath(); qDebug() << path; /* add (ここまで) */ }
"C:\\msys64\\home\\adachi\\test.vbs"のところは自分のファイルに置き換えが必要です。
デモ
ちゃんと出来ていればこんな感じになるはず。
写り込みの範囲内に収まりそうにないので動画は削除しましたm(_ _)m
アプリにしようと思うと、途端に面倒くさくなりました。