Qt - wykorzystanie argumentów funkcji main do otwierania pliku

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 1914 razy

Każdy z nas na co dzień korzysta z różnych programów i otwiera różne pliki klikając dwukrotnie na ikonkę, ale jak to jest zrobione i jak to zrobić, aby takie coś działało w utworzonym własnoręcznie programie? Odpowiedź jest dość prosta, albowiem w pliku main.cpp znajduje się funkcja, która jest wywoływana przez system i ta funkcja przyjmuje dwa argumenty:

Bazując na projekcie rozpoczętym na stronie Programowanie → Qt Creator GUI → Qt - kontrolka QTextEdit można lekko modyfikując kod funkcji main wyświetlić te parametry:

int main(int argc, char *argv[]) { for(int i = 0; i < argc; i++){ qDebug() << argv[i]; // to zostanie wyświetlone w konsoli Qt Creatora }

W konsoli Qt Creator-a zostanie wyświetlone coś w stylu: "C:\...\build-myFirstGUI-Desktop_Qt_5_6_3_MinGW_32bit-Debug\debug\myFirstGUI.exe, czyli pierwszym i jedynym domyślnie elementem tablicy argv jest ścieżka do uruchomionego programu, następne elementy to parametry uruchomieniowe programu. Ja zakładam, że parametrami tymi będzie ścieżka do otwieranego pliku tekstowego.

W związku z powyższym konieczne jest zmodyfikowanie konstruktora klasy MainWindow tak, aby ten przyjmował jako argumenty wyżej wymienione parametry funkcji main:

explicit MainWindow(int argc, char *argv[], QWidget *parent = 0);</strong> <p>W pliku <strong>mainwindow.cpp</strong> w konstruktorze klasy <strong class="Qt Cpp val_type">MainWindow</strong> konieczne jest obsłużenie wczytywania pliku z wykorzystaniem parametrów funkcji <strong class="Qt Cpp function">main</strong>:</p> <code>if(argc > 1){ openFile(argv[1]); }

Metodę openFile należy utworzyć:

void MainWindow::openFile(QString filePath){ QFile readFile(filePath); QFileInfo fileInfo(filePath); QString extension = fileInfo.suffix(); if(readFile.exists()){ if(readFile.open(QIODevice::ReadOnly | QIODevice::Text)){ QTextStream read(&readFile); read.setCodec("UTF-8"); if(extension == "txt"){ ui->edit->setText(read.readAll()); }else if(extension == "ftf"){ ui->edit->setHtml(read.readAll()); } readFile.close(); } } QTextCursor cursor = ui->edit->textCursor(); cursor.movePosition(QTextCursor::End); ui->edit->setTextCursor(cursor); }

i jednocześnie zmienić kod sygnału on_actionOpen_triggered:

void MainWindow::on_actionOpen_triggered() { QString filePath = QFileDialog::getOpenFileName( this, // wskaźnik na rodzica (może być 0, gdy rodzica nie ma) "Open text file", // Text belki tytułowej okna dialogowego QDir::homePath(), // ścieżka startowa "All txt files (*.txt *.ftf);;Txt files (*.txt);;Formatted tekxt file (*.ftf)" // filtr plików ); openFile(filePath); }

Po wprowadzeniu powyższych zmian wystarczy w systemie wskazać jako program uruchomieniowy swój wypasiony edytor tekstu aby program otwierany plik został wyświetlony w twoim programie.

Propozycje książek