KDE TechBase
  • Page
  • Discussion
  • Edit
  • History
KDE TechBase is a Wiki - You can help! Please contribute! Questions?
Please ask development related questions in the KDE Community Forum.

Development/Tutorials/KCmdLineArgs (de)

< Development | Tutorials

Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenščina | српски | Українська | 简体中文 | 繁體中文

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

  • 1 Zusammenfassung
  • 2 The Code
    • 2.1 main.cpp
    • 2.2 mainwindow.h
    • 2.3 mainwindow.cpp
    • 2.4 tutorial4ui.rc
  • 3 Erklärung
    • 3.1 mainwindow.h
    • 3.2 mainwindow.cpp
    • 3.3 main.cpp
  • 4 Erzeugen, Installieren und Ausführen
    • 4.1 CMakeLists.txt
  • 5 Weiter Geht's

[edit] 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.

[edit] The Code

[edit] 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. }

[edit] 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

[edit] 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. }

[edit] 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.

[edit] Erklärung

[edit] mainwindow.h

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

void openFile(const QString &inputFileName);

[edit] 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.

[edit] main.cpp

Hier passiert die ganze KCmdLineArgs Hexerei.

[edit] Erzeugen, Installieren und Ausführen

[edit] 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

[edit] Weiter Geht's

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

Retrieved from "http://techbase.kde.org/Development/Tutorials/KCmdLineArgs_(de)"
Categories: Tutorial (de) | C++

Navigation

  • Home
  • Help
  • Recent changes

Sections

  • Getting started
  • Development
  • Schedules
  • Policies
  • Contribute
  • Projects

Toolbox

  • What links here
  • Related changes
  • Special pages
  • Printable version
  • Permanent link

Personal tools

  • 38.107.191.96
  • Talk for this IP
  • Log in / create account
  • Login with OpenID
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