อัปเดต: สำหรับ 14.04 ดูคำตอบที่ง่ายมากโดย int_ua
ข้อความต้นฉบับ:
ที่http://talk.maemo.org/showthread.php?t=87580มีภาพรวมพื้นฐานของวิธีเพิ่มส่วนขยายใน QML ฉันตัดสินใจถ่ายโดยใช้ ubuntu-sdk แทนซึ่งแตกต่างกันเล็กน้อย ฉันจะเอกสารด้านล่าง
สำหรับโครงการนี้ฉันเลือกUbuntu Touch / Simple UI พร้อม C ++ Backendใน QtCreator สิ่งนี้สร้างโครงการที่มีสองส่วนแยกจากกันส่วนแบ็คเอนด์และส่วนหน้า touchui ที่เขียนใน QML ในแบ็กเอนด์เราจะเพิ่มไฟล์สองไฟล์สำหรับคลาส Launcher
launcher.h:
#ifndef LAUNCHER_H
#define LAUNCHER_H
#include <QObject>
#include <QProcess>
class Launcher : public QObject
{
Q_OBJECT
public:
explicit Launcher(QObject *parent = 0);
Q_INVOKABLE QString launch(const QString &program);
private:
QProcess *m_process;
};
#endif // LAUNCHER_H
launcher.cpp:
#include "launcher.h"
Launcher::Launcher(QObject *parent) :
QObject(parent),
m_process(new QProcess(this))
{
}
QString Launcher::launch(const QString &program)
{
m_process->start(program);
m_process->waitForFinished(-1);
QByteArray bytes = m_process->readAllStandardOutput();
QString output = QString::fromLocal8Bit(bytes);
return output;
}
คลาสนี้ใช้ QProcess เพื่อรันโปรแกรมรอให้เสร็จสิ้นอ่าน stdout และส่งคืนเป็นสตริง
ต่อไปเราต้องแก้ไขแบ็กเอนด์ / แบ็กเอนด์. cpp เพื่อรวมคลาส ต้องใช้สองบรรทัด ผนวกรวมถึง:
#include "launcher.h"
และในBackendPlugin :: registerTypesเพิ่มบรรทัด:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
ควรมีบรรทัดสำหรับ MyType อยู่แล้วซึ่งเป็นตัวอย่างที่รวมไว้ หลังจากนี้เราควรจะสามารถสร้างแบ็กเอนด์ สิ่งเดียวที่เหลืออยู่ก็คือใช้ในไฟล์ main.qml สำหรับสิ่งนี้ฉันเพิ่มบรรทัด:
Launcher { id: myLauncher }
และไปที่ตัวจัดการ onClick ของปุ่มให้ตั้งค่า:
myType.helloWorld = myLauncher.launch("date");
ณ จุดนี้สิ่งที่เหลืออยู่ก็คือการเริ่มต้นและทดสอบ นี่คือที่ฉันพบปัญหาเนื่องจาก QtCreator ดูเหมือนจะไม่ตั้งค่าทุกอย่างอย่างถูกต้องตามค่าเริ่มต้น ในขณะที่ฉันกำลังแก้ไขปัญหาในเทอร์มินัลนำทางไปยังไดเรกทอรีโครงการ QtCreator ของคุณและ:
mkdir -p Ubuntu/Example
จากนั้นคัดลอกไฟล์ libUbuntuExample.so จาก ProjectBuildDir / backend ไปยัง Ubuntu / ตัวอย่างและไฟล์ qmldir จาก ProjectName / backend / qmldir จากนั้นคุณสามารถเรียกใช้:
qmlscene -I . ProjectName/touchui/main.qml
ฉันแน่ใจว่าอาจเป็นวิธีที่ง่ายในการจัดการทั้งหมดนี้เพื่อให้ Build / Run ใช้งานได้