Development/Tutorials/KCmdLineArgs (de)

Jump to: navigation, search
Befehlszeilen Argumente (Under construction)
Anleitungsserie   Anleitung für Anfänger
Voriges Kapitel   Anleitung 4 - Laden und Speichern von Dateien
Nächstes Kapitel   Tutorial 6 - ###)
Weiterführende Texte   KCmdLineArgs KCmdLineOptions
Navigation   Deutsche Startseite

Contents

Zusammenfassung

In diesem Kapitel werden sie lernen ihrer Anwendung zu ermöglichen, Dateien über die Befehlszeile zu öffnen oder sogar mit 'Öffnen mit' von Dolphin aus zu verwenden.

Introtokdetutorial5.png

The Code

main.cpp

  1. #include <KApplication>
  2. #include <KAboutData>
  3. #include <KCmdLineArgs>
  4. #include <KUrl> //new
  5.  
  6. #include "mainwindow.h"
  7.  
  8. int main (int argc, char *argv[])
  9. {
  10.   KAboutData aboutData( "tutorial5", "tutorial5",
  11.       ki18n("Tutorial 5"), "1.0",
  12.       ki18n("A simple text area which can load and save."),
  13.       KAboutData::License_GPL,
  14.       ki18n("Copyright (c) 2007 Developer") );
  15.   KCmdLineArgs::init( argc, argv, &aboutData );
  16.  
  17.   KCmdLineOptions options; //new
  18.   options.add("+[file]", ki18n("Document to open")); //new
  19.   KCmdLineArgs::addCmdLineOptions(options); //new
  20.  
  21.   KApplication app;
  22.  
  23.   MainWindow* window = new MainWindow();
  24.   window->show();
  25.  
  26.   KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); //new
  27.   if(args->count()) //new
  28.   {
  29.     window->openFile(args->url(0).url()); //new
  30.   }
  31.  
  32.   return app.exec();
  33. }

mainwindow.h

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3.  
  4. #include <KXmlGuiWindow>
  5. #include <KTextEdit>
  6.  
  7. class MainWindow : public KXmlGuiWindow
  8. {
  9.   Q_OBJECT
  10.  
  11.   public:
  12.     MainWindow(QWidget *parent=0);
  13.     void openFile(const QString &inputFileName); //new
  14.  
  15.   private:
  16.     KTextEdit* textArea;
  17.     void setupActions();
  18.     QString fileName;
  19.  
  20.   private slots:
  21.     void newFile();
  22.     void openFile();
  23.     void saveFile();
  24.     void saveFileAs();
  25.     void saveFileAs(const QString &outputFileName);
  26. };
  27.  
  28. #endif

mainwindow.cpp

  1. #include "mainwindow.h"
  2.  
  3. #include <KApplication>
  4. #include <KAction>
  5. #include <KLocale>
  6. #include <KActionCollection>
  7. #include <KStandardAction>
  8. #include <KFileDialog>
  9. #include <KMessageBox>
  10. #include <KIO/NetAccess>
  11. #include <KSaveFile>
  12. #include <QTextStream>
  13.  
  14. MainWindow::MainWindow(QWidget *parent)
  15.     : KXmlGuiWindow(parent),
  16.       fileName(QString())
  17. {
  18.   textArea = new KTextEdit;
  19.   setCentralWidget(textArea);
  20.  
  21.   setupActions();
  22. }
  23.  
  24. void MainWindow::setupActions()
  25. {
  26.   KAction* clearAction = new KAction(this);
  27.   clearAction->setText(i18n("Clear"));
  28.   clearAction->setIcon(KIcon("document-new"));
  29.   clearAction->setShortcut(Qt::CTRL + Qt::Key_W);
  30.   actionCollection()->addAction("clear", clearAction);
  31.   connect(clearAction, SIGNAL(triggered(bool)),
  32.           textArea, SLOT(clear()));
  33.  
  34.   KStandardAction::quit(kapp, SLOT(quit()),
  35.                         actionCollection());
  36.  
  37.   KStandardAction::open(this, SLOT(openFile()),
  38.                         actionCollection());
  39.  
  40.   KStandardAction::save(this, SLOT(saveFile()),
  41.                         actionCollection());
  42.  
  43.   KStandardAction::saveAs(this, SLOT(saveFileAs()),
  44.                         actionCollection());
  45.  
  46.   KStandardAction::openNew(this, SLOT(newFile()),
  47.                         actionCollection());
  48.  
  49.   setupGUI();
  50. }
  51.  
  52. void MainWindow::newFile()
  53. {
  54.   fileName.clear();
  55.   textArea->clear();
  56. }
  57.  
  58. void MainWindow::saveFileAs(const QString &outputFileName)
  59. {
  60.   KSaveFile file(outputFileName);
  61.   file.open();
  62.  
  63.   QByteArray outputByteArray;
  64.   outputByteArray.append(textArea->toPlainText());
  65.   file.write(outputByteArray);
  66.   file.finalize();
  67.   file.close();
  68.  
  69.   fileName = outputFileName;
  70. }
  71.  
  72. void MainWindow::saveFileAs()
  73. {
  74.   saveFileAs(KFileDialog::getSaveFileName());
  75. }
  76.  
  77. void MainWindow::saveFile()
  78. {
  79.   if(!fileName.isEmpty())
  80.   {
  81.     saveFileAs(fileName);
  82.   }
  83.   else
  84.   {
  85.     saveFileAs();
  86.   }
  87. }
  88.  
  89. void MainWindow::openFile() //changed
  90. {
  91.   openFile(KFileDialog::getOpenFileName());
  92. }
  93.  
  94. void MainWindow::openFile(const QString &inputFileName) //new
  95. {
  96.   QString tmpFile;
  97.   if(KIO::NetAccess::download(inputFileName, tmpFile, 
  98.          this))
  99.   {
  100.     QFile file(tmpFile);
  101.     file.open(QIODevice::ReadOnly);
  102.     textArea->setPlainText(QTextStream(&file).readAll());
  103.     fileName = inputFileName;
  104.  
  105.     KIO::NetAccess::removeTempFile(tmpFile);
  106.   }
  107.   else
  108.   {
  109.     KMessageBox::error(this, 
  110.         KIO::NetAccess::lastErrorString());
  111.   }
  112. }

tutorial4ui.rc

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <gui name="tutorial5"
  3.      version="1"
  4.      xmlns="http://www.kde.org/standards/kxmlgui/1.0"
  5.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6.      xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0
  7.                          http://www.kde.org/standards/kxmlgui/1.0/kxmlgui.xsd" >
  8.  
  9.   <MenuBar>
  10.     <Menu name="file" >
  11.       <Action name="clear" />
  12.     </Menu>
  13.   </MenuBar>
  14.  
  15.   <ToolBar name="mainToolBar" >
  16.     <text>Main Toolbar</text>
  17.     <Action name="clear" />
  18.   </ToolBar>
  19.  
  20. </gui>

Dies ist identisch mit tutorial'X'ui.rc aus den letzten beiden Anleitungen ausser dass name zu 'tutorial5' geändert wurde.

Erklärung

mainwindow.h

Hier haben wir nichts weiteres gemacht als eine neue openFile Funktion hinzuzufügen, die einen QString annimmt:

void openFile(const QString &inputFileName);

mainwindow.cpp

Hier gibt es keinen neuen Code, nur Umordnen. Alles aus void openFile() wurde in void openFile(const QString &inputFileName) verschoben, ausser der Aufruf an KFileDialog::getOpenFileName().

Auf diese Weise können wir openFile() aufrufen, wenn wir einen Dialog anzeigen möchten, oder wir können openFile(QString) aufrufen, falls wir den Namen der Datei bereits kennen.

main.cpp

Hier passiert die ganze KCmdLineArgs Hexerei.

Erzeugen, Installieren und Ausführen

CMakeLists.txt

  1. project(tutorial5)
  2.  
  3. find_package(KDE4 REQUIRED)
  4. include_directories( ${KDE4_INCLUDES} )
  5.  
  6. set(tutorial5_SRCS 
  7.   main.cpp
  8.   mainwindow.cpp
  9. )
  10.  
  11. kde4_add_executable(tutorial5 ${tutorial5_SRCS})
  12.  
  13. target_link_libraries(tutorial5 ${KDE4_KDEUI_LIBS}
  14.                                 ${KDE4_KIO_LIBS})
  15.  
  16. install(TARGETS tutorial5 DESTINATION ${BIN_INSTALL_DIR})
  17. install( FILES tutorial5ui.rc 
  18.          DESTINATION  ${DATA_INSTALL_DIR}/tutorial5 )

Mit dieser Datei kann die Anleitung auf die gleiche Weise erstellt und ausgeführt werden wie Anleitung 3 und 4. Für mehr Informationen siehe Anleitung 3.

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME
make install
$HOME/bin/tutorial5

Weiter Geht's

Now you can move on to the ### (TODO User:milliams) tutorial.


This page was last modified on 14 July 2012, at 16:45. This page has been accessed 4,146 times. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal