Pemrograman Qt 7 – Menjalankan Perintah Linux dari GUI C++ dengan Mudah Menggunakan system()


Bismillahirrahmanirrahim.

Sudah lama saya nantikan untuk membuat GUI dari perintah-perintah Terminal. Banyak sekali perintah Terminal atau kombinasi dari perintah + aplikasi lain yang lebih pantas kalau dibuatkan GUI. Apa saja? Lihat apt-id dan alldeb milik nif dari FUI. Ini aplikasi untuk backup aplikasi satu per satu dan backup-nya bisa diinstal di Ubuntu yang lain. Sangat pantas kalau dibuatkan GUI. Hanya itu? Tidak. Satu pintu ini (yakni memanggil perintah bash Linux dari dalam C++) kalau sudah terbuka, maka akan jadi sangat-sangat lebar lowongan untuk membuat aplikasi GUI dari aplikasi CLI yang sudah ada. Dalam posting 7 ini, saya hanya akan mencontohkan satu aplikasi GUI dengan 3 tombol. Setiap tombol jika diklik maka memanggil perintah “echo ‘metamorfosa’ > metamorfosa.txt“, “ls -l > metamorfosa-ls.txt“, dan “mkdir metamorfosa“. Ingat, sekali pintu ini terbuka, seluruh perintah terminal dapat dipanggil dari dalam program C++ kita. Dan tentulah bisa dipanggil hanya dengan tombol. Ini insya Allah bentuk realisasi dari posting saya sebelunya: https://malsasa.wordpress.com/2013/04/13/linux-desktop-masih-kurang-user-friendly/. Sungguh, saya jamin pembuatan program ini (yang sudah 1 tahun lebih saya cari caranya) adalah sangat mudah. Ternyata oh ternyata.

Wujud Program yang Diinginkan

ngite-ketujuh25

Kode

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog();
    QVBoxLayout     *layoututama;
    QPushButton     *tombolsatu;
    QPushButton     *tomboldua;
    QPushButton     *tomboltiga;
    QLabel          *label;

public slots:
    void echo_metamorfosa();
    void ls_metamorfosa();
    void mkdir_metamorfosa();

private:

};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

Dialog::Dialog()
{
    layoututama     =   new QVBoxLayout;
    tombolsatu      =   new QPushButton("cat > metamorfosa.txt");
    tomboldua       =   new QPushButton("ls -l > metamorfosa_ls.txt");
    tomboltiga      =   new QPushButton("mkdir metamorfosa");
    label           =   new QLabel;

    tombolsatu->setFixedSize(188,55);
    tomboldua->setFixedSize(188,55);
    tomboltiga->setFixedSize(188,55);
    layoututama->addWidget(tombolsatu);
    layoututama->addWidget(tomboldua);
    layoututama->addWidget(tomboltiga);
    layoututama->addWidget(label);
    setLayout(layoututama);

    connect(tombolsatu, SIGNAL(clicked()), this, SLOT(echo_metamorfosa()));
    connect(tomboldua, SIGNAL(clicked()), this, SLOT(ls_metamorfosa()));
    connect(tomboltiga, SIGNAL(clicked()), this, SLOT(mkdir_metamorfosa()));
}

void Dialog::echo_metamorfosa()
{
    system("echo 'metamorfosa' > metamorfosa.txt");
}

void Dialog::ls_metamorfosa()
{
    system("ls -l > metamorfosa_ls.txt");
}

void Dialog::mkdir_metamorfosa()
{
    system("mkdir metamorfosa");
}

Pembahasan

Bagian paling penting yang menjadikan sebuah C++ bisa memanggil perintah terminal adalah kode

system("echo 'metamorfosa' > metamorfosa.txt");
system("ls -l > metamorfosa_ls.txt");
system("mkdir metamorfosa");

Di dalam parameter, kita menuliskan string yang isinya perintah bash (Terminal) kita. Amat sangat mudah, bukan? Kalau sudah bisa ini, kita gabungkan dengan tutorial 5 kemarin sehingga perintah tersebut berada dalam tombol. Jadi kalau tombol diklik, perintah itu jalan. Sangat mudah, bukan?

Hasil Tombol Pertama

Tombol cat > metamorfosa.txt akan menciptakan sebuah berkas metamorfosa.txt yang isinya tulisan metamorfosa. Sebelumnya saya minta maaf karena ada perbedaan. Tombol bertuliskan cat > metamorfosa tetapi perintahnya di dalamnya malah echo ‘metamorfosa’ > metamorfosa.txt. Yah, yang penting intinya bikin berkas teks yang isinya tulisan metamorfosa-lah. Jika belum mengerti perintah-perintah bash yang saya pakai dalam program ini, silakan merujuk ke Tutorial Shell Dasar 5 Menit.

ngite-ketujuh20bIsinya metamorfosa.txt ketika dibuka dengan Kate:

ngite-ketujuh24

Kesimpulan tombol pertama: perintah bash sukses dieksekusi dari satu klik GUI.

Hasil Tombol Kedua

ngite-ketujuh21b

Ini isi dari berkas metamorfosa_ls.txt setelah dibuka dengan Kate:resized_ngite-ketujuh23

Hasil Tombol Ketiga

Ini hasil dari tombol ketiga yaitu mkdir metamorfosa:

ngite-ketujuh22bHasilnya? Tentu saja membuat folder yang bernama metamorfosa.

Perbandingan dengan C/C++ Tanpa Qt

Tentu sebelum saya menyentuh Qt, saya tes dulu Rujukan 1 dengan C murni. Saya ketik dengan nano lalu saya kompilasi dengan gcc (yang C++ tentu saya kompilasi dengan g++). Saya jalankan dan alhamdulillah, bisa! Perintah yang saya sertakan dalam program itu benar-benar dipanggil dan jalan. Ini buktinya.

Kode C

ngite-ketujuh33

Perhatikan, cuma perintah echo dan pwd yang dipanggil.

Hasil Kompilasi

ngite-ketujuh34

Dan benarlah bahwa echo dan pwd itu berjalan sebagaimana mereka jalan di Terminal. Alhamdulillah.

Unduh Kode Sumber

Program Qt kali ini bernama Embrio-Metamorfosa.

Tautan: http://www.mediafire.com/download/guqrb3blh5tosuz/Embrio-Metamorfosa.tar.gz (3 KB)

Kode sumber C dan C++ untuk program CLI saya juga sertakan. Di dalamnya sudah ada petunjuk kompilasi.

Tautan: http://www.mediafire.com/download/tk0tzbl889o7v29/Embrio-Metamorfosa_Murni_C-C%2B.tar.gz (3 KB)

Kesimpulan

  1. Seluruh perintah Terminal (bash) bisa dipanggil dari GUI alias bisa dibuatkan GUI-nya melalui C++ dengan fungsi system().
  2. Saya ada kesempatan untuk membuat GUI untuk repository changer bagi Ubuntu dan IGOS Nusantara.
  3. Saya ada kesempatan untuk membuat GUI untuk alldeb dan apt-id ( salah satu inovasi terbaik yang pernah saya lihat dari hacker Indonesia)
  4. Saya bisa membuat GUI untuk perintah Terminal apa pun walau lebih dari satu perintah digabung jadi satu.
  5. Walau belum tentu saya bisa lakukan semua itu.

Rujukan

6 thoughts on “Pemrograman Qt 7 – Menjalankan Perintah Linux dari GUI C++ dengan Mudah Menggunakan system()

  1. Ping balik: Pemrograman Qt 9 – QProcess dan Menjalankan Perintah Linux | Ade Malsasa Akbar

  2. Ping balik: Pemrograman Qt 10 – QTextEdit, QFile, QTextStream, QLabel, Membaca Standard Output Shell, Membaca Berkas, dan Membuat Berkas TXT | Ade Malsasa Akbar

  3. Ping balik: Pemrograman Qt 10 – QTextEdit, QLabel, Membaca Standard Output Shell, Membaca Berkas, dan Membuat Berkas TXT | Ade Malsasa Akbar

  4. Ping balik: Pemrograman Qt 7 – Menjalankan Perintah Linux dari GUI C++ dengan Mudah Menggunakan system() | VedroXiDe

Dilarang menggunakan emotikon

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s