Esta serie de tutoriales son una copia de lo ya traducido en TechBase por mi. En dicha página puedes encontrar la versión
original y la versión traducida al español.
Contenido
- Resumen
- El código
- main.cpp
- mainwindow.h
- mainwindow.cpp
- tutorial5ui.rc
- Explicación
- mainwindow.h
- mainwindow.cpp
- main.cpp
- Make, Instalar y Ejecutar
- CMakeLists.txt
Resumen
Ahora que tenemos el editor de texto con el cual podemos cargar y guardar archivos, vamos a hacer que actúe mas como
una aplicación de escritorio, permitiendo cargar archivos desde la linea de ordenes e incluso usar Abrir con
en Dolphin.

El código
main.cpp
- #include <KApplication>
- #include <KAboutData>
- #include <KCmdLineArgs>
- #include <KUrl> //nuevo
- #include "mainwindow.h"
- int main (int argc, char *argv[])
- {
- KAboutData aboutData( "tutorial5", "tutorial5",
- ki18n("Tutorial 5"), "1.0",
- ki18n("A simple text area which can load and save."),
- KAboutData::License_GPL,
- ki18n("Copyright (c) 2007 Developer") );
- KCmdLineArgs::init( argc, argv, &aboutData );
- KCmdLineOptions options; //nuevo
- options.add("+[file]", ki18n("Document to open")); //nuevo
- KCmdLineArgs::addCmdLineOptions(options); //nuevo
- KApplication app;
- MainWindow* window = new MainWindow();
- window->show();
- KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); //nuevo
- if(args->count()) //nuevo
- {
- window->openFile(args->url(0).url()); //nuevo
- }
- return app.exec();
- }
mainwindow.h
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <KXmlGuiWindow>
- #include <KTextEdit>
- class MainWindow : public KXmlGuiWindow
- {
- Q_OBJECT
- public:
- private:
- KTextEdit* textArea;
- void setupActions();
- QString fileName;
- private slots:
- void newFile();
- void openFile();
- void saveFile();
- void saveFileAs();
- };
- #endif
mainwindow.cpp
- #include "mainwindow.h"
- #include <KApplication>
- #include <KAction>
- #include <KLocale>
- #include <KActionCollection>
- #include <KStandardAction>
- #include <KFileDialog>
- #include <KMessageBox>
- #include <KIO/NetAccess>
- #include <KSaveFile>
- #include <QTextStream>
- : KXmlGuiWindow(parent),
- {
- textArea = new KTextEdit;
- setCentralWidget(textArea);
- setupActions();
- }
- void MainWindow::setupActions()
- {
- KAction* clearAction = new KAction(this);
- clearAction->setText(i18n("Limpiar"));
- clearAction->setIcon(KIcon("document-new"));
- clearAction->setShortcut(Qt::CTRL + Qt::Key_W);
- actionCollection()->addAction("limpiar", clearAction);
- connect(clearAction, SIGNAL(triggered(bool)),
- textArea, SLOT(clear()));
- KStandardAction::quit(kapp, SLOT(quit()),
- actionCollection());
- KStandardAction::open(this, SLOT(openFile()),
- actionCollection());
- KStandardAction::save(this, SLOT(saveFile()),
- actionCollection());
- KStandardAction::saveAs(this, SLOT(saveFileAs()),
- actionCollection());
- KStandardAction::openNew(this, SLOT(newFile()),
- actionCollection());
- setupGUI();
- }
- void MainWindow::newFile()
- {
- fileName.clear();
- textArea->clear();
- }
- {
- KSaveFile file(outputFileName);
- file.open();
- QByteArray outputByteArray;
- outputByteArray.append(textArea->toPlainText());
- file.write(outputByteArray);
- file.finalize();
- file.close();
- fileName = outputFileName;
- }
- void MainWindow::saveFileAs()
- {
- saveFileAs(KFileDialog::getSaveFileName());
- }
- void MainWindow::saveFile()
- {
- if(!fileName.isEmpty())
- {
- saveFileAs(fileName);
- }
- else
- {
- saveFileAs();
- }
- }
- void MainWindow::openFile() //cambiado
- {
- openFile(KFileDialog::getOpenFileName());
- }
- {
- QString tmpFile;
- if(KIO::NetAccess::download(inputFileName, tmpFile, this))
- {
- fileName = inputFileName;
- KIO::NetAccess::removeTempFile(tmpFile);
- }
- else
- {
- KMessageBox::error(this,
- KIO::NetAccess::lastErrorString());
- }
- }
tutorial5ui.rc
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
- <gui name="tutorial5" version="1">
- <ToolBar name="mainToolBar" >
- <text>Main Toolbar</text>
- <Action name="limpiar" />
- </ToolBar>
- <MenuBar>
- <Menu name="file" >
- <Action name="limpiar" />
- </Menu>
- </MenuBar>
- </gui>
Explicación
mainwindow.h
Lo único que hemos añadido a partir del tutorial 4 es la función openFile que tiene como parámetro un QString.
mainwindow.cpp
No tenemos nuevo código, solo lo hemos reordenado. Todo lo de void openFile() se ha movido a void
openFile(const QString &inputFileName) excepto la llamada a KFileDialog::getOpenFileName().
De esta manera, podemos llamar a openFile() si queremos mostrar un diálogo, o podemos llamar a
openFile(QString) si ya conocemos el nombre del archivo.
main.cpp
Aqui es donde la clase KCmdLineArgs realiza todo el trabajo.
Make, Instalar y Ejecutar
- project(tutorial5)
- find_package(KDE4 REQUIRED)
- include_directories( ${KDE4_INCLUDES} )
- set(tutorial5_SRCS
- main.cpp
- mainwindow.cpp
- )
- kde4_add_executable(tutorial5 ${tutorial5_SRCS})
- target_link_libraries(tutorial5 ${KDE4_KDEUI_LIBS}
- ${KDE4_KIO_LIBS})
- install(TARGETS tutorial5 DESTINATION ${BIN_INSTALL_DIR})
- install( FILES tutorial5ui.rc
- DESTINATION ${DATA_INSTALL_DIR}/tutorial5 )
mas información, mira el tutorial 3.
- mkdir build && cd build
- cmake .. -DCMAKE_INSTALL_PREFIX=$HOME
- make install
- $HOME/bin/tutorial5
- Inicie sesión o regístrese para enviar comentarios



Comentarios recientes
hace 1 semana 3 días
hace 2 semanas 13 horas
hace 4 semanas 1 día
hace 4 semanas 2 días
hace 6 semanas 1 día
hace 6 semanas 4 días
hace 7 semanas 3 días
hace 8 semanas 12 horas
hace 8 semanas 3 días
hace 8 semanas 3 días