Arsip Tag: ide

Aplikasi Editor untuk LaTeX di Linux


Bismillahirrahmanirrahim.

texmaker1Ketertarikan saya kepada LaTeX bermula sejak pertama mengenal Linux yakni sejak melihat dokumen-dokumen PDF yang dihasilkan dengan LaTeX. Kesan kala itu hanya rapi, rapi, dan rapi. Ketertarikan kedua saya dimulai ketika melihat Texmaker pada komputer Windows. Texmaker sungguh editor yang sangat keren. Kemudian saya melihat salah satu laman Stackexchange yang mendiskusikan LaTeX Editor, dan gara-gara itu untuk pertama kalinya saya berani menggunakan LaTeX. Saat itu saya mencoba Gummi di Ubuntu. Beberapa bulan berselang, saya beralih ke Texmaker, impresi pertama saya. Lalu saat ini rencana B saya ketika pertama kali membaca laman Stackexchange tersebut akhirnya saya laksanakan. Apa itu rencana B? Itu adalah menerjemahkan laman tersebut ke dalam Bahasa Indonesia sebagaimana yang pernah saya lakukan dengan tutorial Terminal dari komunitas Mint. Inilah terjemahan dari big list http://tex.stackexchange.com/questions/339/latex-editors-ides. Seluruh skrinsot di sini diambil dari laman tersebut kecuali beberapa yang saya sebutkan lain. Semoga tulisan ini bermanfaat. Baca lebih lanjut

Iklan

LaTeX, Gummi, dan Ubuntu


Bismillahirrahmanirrahim.

Saya menyukai tulisan yang rapi. Semenjak awal mengenal Linux, saya telah mengenal banyak PDF yang rapi. Ternyata PDF-PDF tersebut ditulis dengan \LaTeX, bukan dengan Microsoft Word seperti yang saya sangka. Sejak itu saya tertarik. Namun baru pada 22 Oktober 2013 saya menginstal \LaTeX untuk pertama kalinya. Ternyata sangat menarik. Jauh lebih menarik daripada Writer atau Word. Saya bisa mengendalikan seluruh dokumen semau saya tetapi otomatis rapi. Dan semangat menulis saya bangkit kembali setelah mencoba \LaTeX ini. Sungguh luar biasa menyenangkan. Saya ingin menunjukkan betapa mudah dan rapinya LaTeX.

LaTeX di Ubuntu

Saya menginstal Gummi selaku GUI untuk \LaTeX. Mengapa? Karena setelah saya membaca beberapa artikel perbandingan GUI untuk \LaTeX, saya memilih yang memiliki live preview. Sejauh ini baru Texmaker dan Gummi saja yang saya temukan. Sesungguhnya saya lebih menyukai Texmaker karena tampilannya keren sekali (seperti Qt Creator). Namun akhirnya pilihan saya jatuh pada Gummi. Ia yang paling kecil ukuran unduhannya (sekitar 300 MB) dibanding yang lain. Memang besar, tetapi kalau hasilnya serapi ini, 300 MB cuma angin lalu. Gambar ini diambil di KDE yang belum terinstal qtcurve, sehingga tampilan Gummi (GTK) terkesan kurang menarik.

compressed_latex-gummi1

Panel kiri untuk menulis kode dan kanan untuk preview

Awal “Keberanian” Saya

Sebelumnya saya “tidak berani” menginstal \LaTeX karena khawatir kesulitan memakainya. Namun saya mulai tertarik sejak melihat komputer seorang pengguna Windows yang di situ terdapat Texmaker. Ah, indah! Yang kedua, saya memberanikan diri mencari artikelnya. Subhanallah, saya menemukan artikel http://tex.stackexchange.com/questions/339/latex-editors-ides dan harus saya akui artikel ini penyebab saya bersikeras ingin menggunakan \LaTeX. Ya, di situ ada banyak skrinsot Texmaker, Gummi, Vim, dan editor lain yang demikian indah. Berikut ini skrinsot dari laman tersebut. Siapa tak tergoda mencobanya?

texmaker - latex

Texmaker

texstudio -latex

Texstudio

texworks - latex

Texworks

vim-latex

Vim & LaTeX Extension

Dan tidak akan saya lupakan, sebuah buku karya Kang Tedy Tirtawidjaja yang membahas \LaTeX secara komplet sehingga menumbuhkan semangat saya mencoba. Buku inilah yang pertama kali memprovokasi saya untuk mencoba \LaTeX. Saya memperoleh dasar-dasar menulis dengan \LaTeX awalnya dari buku ini. Akhirnya saya bisa menerapkannya. Terima kasih, Kang Tedy! Unduh bukunya di http://budi.insan.co.id/docs/membuat%20dokumen%20dengan%20latex%20-%20ver.0.3.pdf.

latex-tirta

Salah satu halaman buku tersebut

Apa Kelebihan LaTeX?

  1. \LaTeX adalah typesetter yang digunakan oleh profesor, peneliti, ilmuwan, matematikawan, mahasiswa, dan pelajar untuk menulis dokumen sejak dulu kala (1980) sebelum adanya Microsoft Office. Terlalu banyak skripsi, tesis, paper, bahkan buku dan tutorial dikerjakan dengan \LaTeX. Segera Anda akan menyadari bahwa banyak tutorial Linux yang Anda unduh selama ini ternyata ditulis dengan \LaTeX (baca Properties-nya). Banyak orang menggunakan \LaTeX. Karena itu, Anda tidak akan pernah kekurangan tutorial untuk \LaTeX.
  2. \LaTeX menghasilkan dokumen yang tingkat kerapiannya sangat tinggi. Bisa dibilang lebih rapi dari Microsoft Word.
  3. \LaTeX menghasilkan teks rumus matematika dengan tingkat ketelitian sangat tinggi. Ia bisa menuliskan rumus sesulit apa pun (oleh karena itu para profesor menggunakannya).
  4. \LaTeX itu otomatis. Penomoran heading otomatis dipegang oleh LaTeX. \LaTeX otomatis membuatkan daftar isi, daftar gambar, daftar tabel, bahkan daftar kode sumber. Begitu pula penomoran footnote, halaman, abstrak, margin, dan lain-lain.
  5. \LaTeX memiliki sintaks yang mirip HTML, dan sama sekali tidak sulit. Anda hanya butuh beberapa hari saja untuk bisa menggunakan \LaTeX (saya mulai menggunakan LaTeX 5 hari lalu/22 Oktober 2013).
  6. \LaTeX itu gratis.
  7. \LaTeX itu open source.
  8. \LaTeX punya banyak sekali package (baca: plugin) yang memperluas fungsinya sebagaimana Firefox dengan addons-nya.

Anda dan LaTeX

  • Anda, jika sudah bosan dengan Microsoft Word atau Libreoffice Writer, cobalah \LaTeX.
  • Jika Anda merasa Writer kekurangan fungsi equation editor (kalah dengan Word), maka Anda harus mencoba \LaTeX. Rasakan power-nya.  $latex \[ \int_a^b f(x)\,dx.\]$
  • Jika Anda menyukai matematika, sayang sekali jika tidak kenal \LaTeX.
  • Jika Anda merasa gairah menulis menurun karena kurang tantangan, cobalah \LaTeX.
  • Jika Anda sangat menyukai kerapian, gunakan LaTeX.
  • Jika Anda menyukai matematika, sayang sekali jika tidak kenal Jika Anda menyukai matematika, sayang sekali jika tidak kenal \LaTeX.
  • Jika tombol Delete Anda rusak sedangkan Libreoffice Writer maupun Kingsoft Writer tidak menerima rebinding Anda dengan xev dan xmodmap, maka cobalah Gummi + \LaTeX.
  • Atau jika Anda memang sedang senggang.

Saya dan LaTeX

Alhamdulillah, kemarin saya baru saja menyelesaikan tutorial Qt ke-11 sekaligus versi PDF-nya. Versi PDF ini adalah dokumen \LaTeX pertama saya. Biasanya saya hanya mengandalkan Writer untuk membuatnya. Sekarang bisa dilakukan dengan \LaTeX dan saya sangat puas. Hasilnya begitu rapi untuk ukuran seseorang yang baru memakai \LaTeX (yah, tutorialnya memang banyak, sih). Berikut ini skrinsot tulisan saya dengan \LaTeX.

latex-transisi

Tak pernah saya mengira tulisan saya bisa serapi ini. Tak putus-putus rasa hati ingin memandangnya. Padahal saya baru memakai sedikit kode \LaTeX. Dan tujuan saya menginstal Gummi di Ubuntu adalah menulis seluruh versi PDF untuk posting selanjutnya dengan LaTeX.

Daftar Tutorial LaTeX

Bagian yang paling saya suka adalah tutorial. Tentunya saya tak perlu menuliskannya karena sudah ada orang sebelum saya yang melakukannya. Mereka ahlinya. Maka silakan membaca tutorial mereka. Istimewa untuk buku Kang Tedy, saya sudah sebutkan tautannya di atas.

  1. http://matematika.upi.edu/wp-content/uploads/2011/03/LaTeXpemula.pdf
  2. http://ctan.cermin.lipi.go.id/macros/latex/contrib/hyperref/doc/manual.pdf
  3. http://www.stdout.org/~winston/latex/latexsheet.pdf
  4. http://ece.uprm.edu/~caceros/latex/introduction.pdf
  5. http://www.andy-roberts.net/res/writing/latex/original_toc.pdf
  6. http://en.wikibooks.org/wiki/LaTeX/Colors
  7. http://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/GSWLaTeX.pdf
  8. http://www.tug.org/twg/mactex/tutorials/ltxprimer-1.0.pdf
  9. http://latex-project.org/guides/usrguide.pdf
  10. http://www.ling.ohio-state.edu//events/lcc/tutorials/intro-latex.pdf
  11. http://tex.stackexchange.com/questions/38978/how-can-i-manually-install-a-latex-package-debian-ubuntu-linux
  12. http://tex.stackexchange.com/questions/867/syntax-coloring-in-latex
  13. http://texblog.org/2011/06/11/latex-syntax-highlighting-examples/
  14. http://tex.stackexchange.com/questions/83882/how-to-highlight-python-syntax-in-latex-listings-lstinputlistings-command

Qt Creator – Tip dan Trik Efisien Memrogram C++ dalam IDE


Bismillahirrahmanirrahim.

ngite-kedua15

Qt Creator di kampung halamannya, KDE

Tulisan ini hanyalah catatan penggunaan Qt Creator, sebuah IDE untuk C++. Isinya hanya tip dan trik cepat memrogram berikut bagaimana menggunakan fitur Qt Creator untuk menunjang efisiensi pemrograman kita. Tulisan ini hanya dikhususkan kepada para pemula bukan untuk ahli pemrograman. Oh iya, tulisan ini pun lepas dari tutorial saya sebelumnya soal memrogram Qt baik secara drag and drop maupun hard coding. Ini hanya catatan kecil.

SATU :: Tooltip Pembantu Passing Parameter

Ini sangat-sangat berguna untuk saya mempelajari bagaimana memasukkan suatu passing parameter yang benar untuk suatu kelas. Mengapa? Karena tiap kelas memiliki passing parameter yang beda, dan tiap kelas bisa punya lebih dari satu bentuk umum passing parameter. Nah, Qt Creator di sini otomatis memberikan panduan lengkap bentuk umum dalam suatu kelas Qt yang dinomori. Saya sangat diuntungkan dengan adanya fitur ini karena dengannya saya bisa belajar pemrograman Qt (baca: mengisikan passing parameter dengan benar) dengan cepat sekali tanpa pengajar. Cukup ikuti saja pola saran yang tertulis di tooltip warna hitam ini dan semua beres. Kalau misalnya error, cukup buka dokumentasinya.

ngite-kedua17

ngite-kedua19

Dua skrinsot di atas menunjukkan tooltip untuk method setMinimumSize. Ada dua jenis passing parameter, satunya bentuk angka x angka, satunya bentuk objek. Anda bisa gunakan tombol panah atas/bawah untuk melihat bentuk umum lainnya dari tooltip ini, atau klik saja tombol panah yang ada. Di mana kursor Anda berada, di situ juga parameter akan ditebalkan warna putih kalau seandainya dalam satu passing parameter ada sekian parameter yang bisa dimasukkan seperti gambar pertama. Sangat berguna.

DUA :: Error Messages

Error messages bagaimanapun, membingungkan. Namun jika kita tahu kunci-kunci error messages, maka itu justru jadi senjata kita untuk membenahi program. Kita jadi tahu di mana letak kesalahan program. Qt Creator memberikan error messages yang mudah dipahami setiap ada kesalahan.

TIGA :: Class Highlighting

Jika Anda memblok suatu nama kelas, maka seluruh nama kelas dalam satu berkas akan ikut disorot. Ini berguna sekali untuk melihat di mana saja saya memakai kelas QPushButton, di mana saja saya memakai kelas QFrame, dan seterusnya. Ini memangkas waktu kita untuk mencari. Bagusnya, tidak hanya untuk kelas. Objek dan method pun juga diperlakukan demikian. Jadi semakin mudah membaca kode kita.

ngite-kedua20

EMPAT :: Kursor dan Dokumentasi Otomatis

Letakkan kursor pada satu nama kelas Qt dalam kode Anda, tunggu 1 detik, lalu tekan F1. Langsung terbuka di samping kode, subjendela dokumentasi Qt langsung pada halaman kelas yang kita tunjuk. Ajaib, bukan? Ini sangat membantu saya dalam mengerjakan program kemarin dalam keadaan saya tidak tahu sama sekali bagaimana cara memakai sebuah kelas (baca: saya tidak tahu passing parameter-nya apa saja). Dan ini sangat menghemat bandwidth saya karena tidak usah googling lagi. Klik saja tombol Go to Help Mode untuk membuka dokumentasi selayar penuh.

ngite-kedua21

LIMA :: Tanda Baca Otomatis

Ketik nama sebuah method yang disandarkan pada sebuah objek, otomatis Qt Creator akan membentuk () (tanda kurung) untuk kita. Ini berguna sekali karena tombol kurung tutup saya rusak sehingga saya tidak perlu membeli kibor baru. Juga, kalau Anda sudah menulis satu fungsi besar, dengan satu kurung kurawal, lalu enter, maka otomatis Qt Creator akan membuatkan kurung kurawal tutupnya dan memberi indentasi kursor kita ke dalam secara otomatis. Memang fitur ini ada di semua IDE modern tetapi kalau Qt Creator juga memilikinya, saya pun diuntungkan.

ENAM :: Nama Kelas dan Nama Method Otomatis

Mungkin inilah fitur yang paling banyak saya pakai di QtCreator. Cukup ketik beberapa huruf dari nama kelas yang ingin dipakai, Qt Creator sudah memberikan saran pas di bawah kursor yang bisa kita pilih dengan tombol panah. Juga berlaku untuk method. Nah, yang method ini sangat membantu saya karena (kata orang: buset) banyak sekali method di Qt walau untuk satu kelas saja. Sehingga waktu saya jadi hemat kala saya cukup ketik add lalu muncul pilihan dan cukup Enter untuk mendapatkan addWidget dari ratusan pilihan method yang ada. Saya jadi tidak perlu menghafal satu per satu method dalam Qt. Sudah hemat waktu, hemat daya otak pula. Dan ini sangat memudahkan belajar saya. Sebelumnya saya belajar C dan Java, tidak sampai semudah ini.

ngite-kedua22

Penutup

Sedikit dari yang paling sedikit. Mungkin kalau ada trik-trik baru, saya akan perbarui posting ini. Semoga ini bermanfaat buat kaum muslimin semuanya. Selamat menempuh Ramadhan penuh berkah.

Pemrograman Qt 3 – Mendayagunakan QFrame dan QVBoxLayout untuk Membentuk Kolom Lebih Banyak dalam QDialog


Bismillahirrahmanirrahim.

Kalau kemarin kita ngite dengan QGroupBox dan QHBoxLayout, sekarang kita akan mencoba QFrame sebagai ganti QGroupBox baik sebagai kontainer maupun pembuat spasi. Ide dasar program ketiga ini adalah spasi kosong untuk setiap grup widget yang kita buat di dalam QDialog. Oh iya, sampai hari ini kita hanya akan berkutat dengan QDialog tanpa menyentuh QMainWindow. Tentulah, semua hard coding ini tujuannya membuat aplikasi GUI di Linux. Semoga bermanfaat untuk kaum muslimin semuanya.

Wujud Program yang Diinginkan

ngite-kedua9

Daftar Kelas Qt yang Dipakai

  1. QDialog = dipakai untuk membuat jendela tertinggi
  2. QVBoxLayout = dipakai untuk membuat kontainer yang menampung setiap blok/grup dari tombol
  3. QGridLayout = dipakai untuk membuat kontainer paling besar yang menampung semua objek QVBoxLayout nantinya
  4. QPushButton = dipakai untuk membuat tombol
  5. QIcon = dipakai untuk memasukkan gambar sebagi ikon tombol, QIcon dipakai sebagai passing parameter
  6. QSize = dipakai untuk membuat objek yang menyimpan ukuran, yang di program ini objek berisi ukuran tersebut diterapkan pada logo dalam tombol
  7. QFrame = dipakai untuk menggantikan QGroupBox dalam hal menampung tombol-tombol jadi satu blok/grup.

Daftar Method Qt yang Dipakai

  1. addWidget -> dipakai oleh QVBoxLayout, QGridLayout
  2. setMinimumSize -> dipakai oleh QPushButton
  3. setIconSize -> dipakai oleh QPushButton
  4. setIcon -> dipakai oleh QPushButton
  5. setLayout -> dipakai oleh QFrame dan QDialog
  6. setFixedWidth -> dipakai oleh QFrame
  7. setFrameShadow -> dipakai oleh QFrame untuk membentuk bayangan; opsi-opsinya adalah QFrame::Raised, QFrame::Sunken, dan QFrame::Plain
  8. setFrameShape -> dipakai oleh QFrame untuk membentuk wujud panel apakah itu timbul atau tenggelam; opsi-opsinya adalah QFrame::StyledPanel [dipakai oleh default-nya Qt Creator GUI Builder], QFrame::Box
  9. setColumnMinimumWidth -> dipakai oleh QGridLayout untuk menentukan ukuran setiap blok/grup dan menentukan jumlah blok/grup yang bisa dipakai
  10. setRowMinimumHeight -> dipakai oleh QGridLayout, idem
  11. setLayout -> dipakai oleh QDialog selaku kelas tertinggi untuk memasang QGridLayout ke dalam dirinya.

Peta GUI

Saya jelaskan dulu peta QFrame dalam program ini yang saya susun.

ngite-kedua9B

A = QFrame (frameKiri) dengan QVBoxLayout (layoutKontainerKiri)
B = QFrame (frameTengah)
C = QFrame (frameKanan)
D = QFrame (frameSangga)
E = QFrame (frameBawah)
F = QFrame (framePojok)

Kode Program

Sama dengan kegiatan ngite kita kemarin, hanya berkas mainwindow.cpp yang penting.

mainwindow.cpp


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>

Dialog::Dialog()
{
    QVBoxLayout *layoutKontainerKanan  = new QVBoxLayout;
    QVBoxLayout *layoutKontainerKiri   = new QVBoxLayout;
    QVBoxLayout *layoutKontainerTengah = new QVBoxLayout;
    QVBoxLayout *layoutKontainerBawah  = new QVBoxLayout;
    QVBoxLayout *layoutKontainerPojok  = new QVBoxLayout;
    QGridLayout *layoutUtama           = new QGridLayout;

    QPushButton *tombolSatu          = new QPushButton("SATU");
    QPushButton *tombolDua           = new QPushButton("DUA");
    QPushButton *tombolTiga          = new QPushButton("TIGA");
    QPushButton *tombolEmpat         = new QPushButton("");

        layoutKontainerKanan->addWidget(tombolSatu);
        layoutKontainerKanan->addWidget(tombolDua);
        layoutKontainerKanan->addWidget(tombolTiga);
        layoutKontainerKanan->addWidget(tombolEmpat);

        QSize size(88,88);                                  //menentukan ukuran, bisa dipakai di mana-mana nanti

        tombolEmpat->setMinimumSize(100,100);               //objek size lalu dimasukkan ke dalam method setIconSize dalam tombolEmpat
        tombolEmpat->setIconSize(size);                     //nggak sangka, dasar OOP; sampai ukuran ikon pun disimpan sebagai objek
        tombolEmpat->setIcon(QIcon(":/gambar/ubuntu.png")); //logo ubuntu.png ini jadi seukuran 88x88 betulan dalam tombol [sebelumnya gagal]

    QPushButton *tombolLima          = new QPushButton("LIMA");
    QPushButton *tombolEnam          = new QPushButton("ENAM");
    QPushButton *tombolTujuh         = new QPushButton("TUJUH");
    QPushButton *tombolDelapan       = new QPushButton("DELAPAN");

        layoutKontainerKiri->addWidget(tombolLima);
        layoutKontainerKiri->addWidget(tombolEnam);
        layoutKontainerKiri->addWidget(tombolTujuh);
        layoutKontainerKiri->addWidget(tombolDelapan);

    //TOMBOL-TOMBOL DI BARISAN BAWAH
    QPushButton *tombolSembilan      = new QPushButton("SEMBILAN");

        layoutKontainerBawah->addWidget(tombolSembilan);

    QPushButton *tombolSepuluh       = new QPushButton("SEPULUH");

        layoutKontainerPojok->addWidget(tombolSepuluh);

    //FRAME-FRAME PEMUAT TOMBOL
    QFrame *frameKanan = new QFrame;
    frameKanan->setLayout(layoutKontainerKanan);

    QFrame *frameKiri  = new QFrame;
    frameKiri->setLayout(layoutKontainerKiri);

    QFrame *frameTengah = new QFrame;
    frameTengah->setFixedWidth(66);                     //berhasil mengatur ukuran lebar frame secara galak
//    frameTengah->setFrameShadow(QFrame::Raised);      //setFrameShadow dan setFrameStyle
//    frameTengah->setFrameShape(QFrame::StyledPanel);  //kalau dimatikan, maka semua shadow hilang dan hanya tampak spasi kosong
    frameTengah->setLayout(layoutKontainerTengah);      //jangan lupa masukkan layout ke dalam frame

    QFrame *frameBawah = new QFrame;
    frameBawah->setLayout(layoutKontainerBawah);

    QFrame *frameSangga = new QFrame;
    frameSangga->setFixedHeight(88);

    QFrame *framePojok  = new QFrame;
    framePojok->setFixedHeight(50);
    framePojok->setLayout(layoutKontainerPojok);

    layoutUtama->addWidget(frameKanan, 1, 3);
    layoutUtama->addWidget(frameTengah, 1, 2);
    layoutUtama->addWidget(frameKiri, 1, 1);
    layoutUtama->addWidget(frameBawah, 3, 1);
    layoutUtama->addWidget(frameSangga, 2, 1);
    layoutUtama->addWidget(framePojok, 3, 3);
    layoutUtama->setColumnMinimumWidth(3, 100);     //menentukan jumlah kolom dan lebar masing-masingnya
    layoutUtama->setRowMinimumHeight(3, 10);       //menentukan jumlah baris dan tinggi masing-masingnya
    setLayout(layoutUtama);
}

Analisis Kode Program

Sebenarnya sama saja dengan program sebelumnya. Maka akan saya jelaskan beberapa saja yang terpenting.

SATU

QFrame *frameKanan = new QFrame;
 frameKanan->setLayout(layoutKontainerKanan);

Masih seperti kemarin, itulah bentuk umum pembuatan objek dari kelas. Di sini yang disebut kelas ialah QFrame sedangkan objeknya frameKanan. Sesudah dibuat, objek dipasangi layout dengan memakai method setLayout.

DUA

frameTengah->setFixedWidth(66);

Inilah ide dasar program ketiga ini. Method setFixedWidth, sesuai namanya, berguna untuk menentukan ukuran lebar dari frameTengah. Frame yang ini posisinya ada pada baris pertama kolom kedua. Kalau bingung, lihat lagi Peta GUI di atas.

TIGA

layoutUtama->addWidget(frameKanan, 1, 3);
layoutUtama->addWidget(frameTengah, 1, 2);
layoutUtama->addWidget(frameKiri, 1, 1);
layoutUtama->addWidget(frameBawah, 3, 1);
layoutUtama->addWidget(frameSangga, 2, 1);
layoutUtama->addWidget(framePojok, 3, 3);

Perhatikan, layoutUtama sudah dibentuk dari QGridLayout, bukan layout model lainnya. Kalau dibentuk dari kelas ini, maka dia memiliki bentuk umum passing parameter ala QGridLayout juga. Dan ini spesial karena Grid Layout milik Qt itu fleksibel bisa ke samping dan ke bawah sekaligus. Misalnya saja, kode layoutUtama->addWidget(frameKanan, 1, 3); berarti maksudnya masukkan ke dalam Grid Layout bernama layoutUtama sebuah objek bernama frameKanan, pada baris 1 kolom 3. Mudah sekali, bukan? Begini bentuk umumnya:

void QGridLayout::addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )

Bentuk umum ini saya dapat dari dokumentasi internal Qt Creator (tekan F1). Bentuk umum yang njelimet ini, ternyata bisa diterjemahkan jadi kode saya tadi. Bagaimana memahaminya? Begini caranya:

  1. void ini berarti bentuk kode QGridLayout::addWidget dst. adalah fungsi, bukan kelas bukan yang lain. Jadi, tidak perlu dilihat nama QGridLayout-nya kalau mau menggunakan ini. Cukup lihat addWidget dst. saja. Ini artinya fungsi addWidget() di dalam kelas QGridLayout itu cara pakainya demikian. Dan memang berbeda addWidget untuk QGridLayout dengan yang untuk layout lainnya.
  2. QWidget * widget diganti dengan frameKanan
  3. int fromRow diganti dengan 1
  4. int fromColumn diganti dengan 3
  5. sisanya tidak diisi tidak apa-apa.

EMPAT

layoutUtama->setColumnMinimumWidth(3, 100);
layoutUtama->setRowMinimumHeight(3, 10);

Penjelasannya persis seperti nama method-nya. Bentuk umumnya adalah

void QGridLayout::setColumnMinimumWidth ( int column, int minSize )

yang artinya fungsi setColumnMinimumWidth ini gunanya untuk mengatur ukuran lebar minimum untuk kolom yang ditentukan. Maka, kode saya tadi maksudnya aturlah pada kolom ketiga, ukuran lebar 100 piksel.

LIMA

QSize size(88,88);
tombolEmpat->setMinimumSize(100,100);
tombolEmpat->setIconSize(size);
tombolEmpat->setIcon(QIcon(":/gambar/ubuntu.png"));

Nah, untuk kode ini, sengaja saya akhirkan penjelasannya. Pertama, dibuat sebuah objek yang menampung suatu dimensi piksel x piksel. Objek itu bernama size yang diturunkan dari kelas QSize. Ini unik, khas OOP. Segalanyaaa… objek. Bahkan sampai yang namanya dimensi pun dibuat sebagai objek. Sesudah itu, tombolEmpat diatur ukuran minimumnya lalu nah. Inilah gunanya. Dengan method milik PushButton yang bernama setIconSize, objek size tadi dimasukkan ke sini. Jadi kita tidak menuliskan setIconSize(88,88) melainkan setIconSize(size). Gunanya untuk baris berikutnya. Method setIcon gunanya untuk mengatur ikon dari tombol. Bisa ditebak, saya memang ingin membuat aplikasi yang berbasis gambar lagi. Begitu gambar dimasukkan, karena tadi sudah diatur dengan setIconSize, maka otomatis nanti kalau dijalankan programnya, ikon yang ditentukan di sini pasti berukuran 88 x 88. Mudah dipahami, bukan? Yang unik dari method terakhir ini adalah setIcon(QIcon(“”));. Perhatikan, ada method di dalam method. Dan di sini dipakailah kelas QIcon. Saya sendiri tidak seberapa paham mengapa harus begini (tetapi saya mengerti juga buat apa?) yang penting bisa masuk gambarnya. Perhatikan lagi, :/gambar/ubuntu.png itu adalah aturan Qt Creator dalam mengimpor gambar. Lihat tulisan pertama saya soal Qt bila belum mengerti soal impor gambar.

ENAM

frameTengah->setFrameShadow(QFrame::Raised);
frameTengah->setFrameShape(QFrame::StyledPanel);

ngite-kedua12

Khusus untuk baris ke-58 kode, saya jadikan komentar. Seandainya diaktifkan, maka nanti frameTengah akan kelihatan border-nya. Bentuk border yang seperti ini keren, tetapi saya tidak inginkan dalam program kali ini. Mungkin nanti pas perlu baru dipakai. Yang penting, perhatikan passing parameter-nya. QFrame::Raised untuk setFrameShadow dan QFrame::StyledPanel untuk setFrameShape. Begitu cara menulis passing parameter-nya. Anda bisa mencarinya dalam dokumentasi internal Qt Creator untuk jenis shadow dan jenis framestyle lainnya.

Hasil Akhir

Ini hasil yang saya inginkan, yakni ada spasi kosong antargrup. Sebagai bonus, kita berhasil membuat tombol dengan gambar sekaligus mengatur sekehendak kita ukurannya.

ngite-kedua9

Bandingkan dengan program kemarin yang masih kelihatan spasi antargrupnya:

ngite-kedua11

Rangkuman

  1. Grid Layout adalah yang paling bebas yang bisa dipakai untuk meletakkan objek-objek GUI ke samping dan ke bawah.
  2. Untuk mengatur ukuran gambar dalam tombol, kita bisa gunakan QSize untuk menampung ukuran dan memasukkannya ke dalam passing parameter dalam method setIconSize.

Menanti Distro Tanpa Sudo


Seperti yang saya isyaratkan di esai saya sebelumnya, saya ada esai baru. Esai itu berjudul Menanti “Distro Tanpa Sudo”. Esai ini bicara mengenai inspirasi. Jadi, saya katakan dulu kalau inspirasi judul esai ini datang dari esai sebelumnya itu. Hehehe. Mbulet, ya? Pokoknya saya membayangkan suatu saat ada yang membuang sudo dari Linux.

Intinya, di sela-sela keseharian saya, terbersit di benak pertanyaan bagaimana kalau sudo dibuang saja? Saya bukan tipe orang kebanyakan. Tak masalah bagi saya memikirkan sesuatu yang itu bakal ditentang banyak orang :) Ya, dengan pemikiran ini, bisa jadi Linux akan lemah keamanannya. Linux akan jadi selemah Windows. Tapi benak saya menyangkal dengan kalimat meski tanpa sudo, Linux masih lebih aman daripada Windows. Ini seperti membandingkan pendekar pedang dengan orang yang tidak bisa bela diri. Pendekar pedang meski kehilangan pedang, dia masih bisa bela diri yang lain. Walau tanpa pedang. Tapi orang biasa, bisa apa dia? Itulah kira-kira perbandingannya.

Tapi saya membayangkan kalau sudo dibuang. Seharusnya instalasi aplikasi akan jauh lebih sederhana. Seharusnya pengguna awam tidak perlu memegang terminal. Wow.

Tentu, yang saya bayangkan bukanlah Ubuntu dirombak langsung sudo dibuang. Tidak. Yang saya bayangkan, akan ada satu distro coba-coba yang membuang sudo. Jadi tidak ada root. Bahkan bisa dibilang masuk itu sudah root. Kalau benar ada kelak yang membuatnya, saya bersedia mendukung. Nah, jika ada yang tidak setuju, saya persilakan. Tapi jangan iri lho ya kalau kelak distro tanpa sudo itu bakal mengalahkan distro yang tidak setuju :D Hehehe. Yah, meski saya sendiri lebih suka kalau distro-distro itu diperkecil jumlahnya.

Saya yakin masih ada generasi brilian yang akan menyambut ide macam ini. Yah, meski kini orang malah bersedia nge-root (Andoid) dan mau susah payah dekat sistem sudo. Tak mengapa, toh masih terlalu banyak user yang tidak suka konsol. Saya yakin suatu saat ini akan terjadi. Tunggu saja :D

Kalau Linux Mau Maju…


Bismillahirrahmanirrahim.

Tulisan ini diralat tata bahasa, susunan, dan referensinya pada 21 Oktober 2014.

Tulisan ini tersedia dalam PDF

Saya menulis ini sebagai catatan untuk masa depan. Tulisan ini isinya adalah harapan-harapan. Semoga itu bisa diwujudkan. Dan tulisan ini murni opini pribadi. Jadi siapa pun boleh mengambil atau membuangnya. Tentu, tulisan ini tidak lepas dari kesalahan dan tidak ditutup kemungkinannya untuk direvisi. Selamat membaca.

Baca lebih lanjut