Development/Tutorials/KWallet: Difference between revisions
(first version) |
(remember code tags) |
||
Line 12: | Line 12: | ||
===dialog.cpp=== | ===dialog.cpp=== | ||
<code cppqt n> | |||
#include "dialog.h" | #include "dialog.h" | ||
Line 89: | Line 90: | ||
m_launchButton->setDisabled(false); | m_launchButton->setDisabled(false); | ||
} | } | ||
</code> | |||
===dialog.h=== | ===dialog.h=== | ||
<code cppqt n> | |||
#ifndef DIALOG_H | #ifndef DIALOG_H | ||
#define DIALOG_H | #define DIALOG_H | ||
Line 121: | Line 123: | ||
#endif // DIALOG_H | #endif // DIALOG_H | ||
</code> | |||
===main.cpp=== | ===main.cpp=== | ||
<code cppqt n> | |||
#include "dialog.h" | #include "dialog.h" | ||
Line 151: | Line 155: | ||
return app.exec(); | return app.exec(); | ||
} | } | ||
</code> | |||
===CMakeLists.txt=== | ===CMakeLists.txt=== | ||
<code cmake n> | |||
project(Importer) | project(Importer) | ||
Line 166: | Line 172: | ||
target_link_libraries(kwallet-demo ${KDE4_KDECORE_LIBS} ${KDE4_KPARTS_LIBS} ${KDE4_KDEUI_LIBS}) | target_link_libraries(kwallet-demo ${KDE4_KDECORE_LIBS} ${KDE4_KPARTS_LIBS} ${KDE4_KDEUI_LIBS}) | ||
install(TARGETS kwallet-demo ${INSTALL_TARGETS_DEFAULT_ARGS}) | install(TARGETS kwallet-demo ${INSTALL_TARGETS_DEFAULT_ARGS}) | ||
</code> |
Revision as of 21:46, 21 June 2010
Development/Tutorials/KWallet
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文
Abstract
A simple introduction for using the KWallet API, a secure storage framework.
Prerequisites: Basic KDE knowledge, C++.
Example
The API is fun and easy to use, and will guarantee you a long and stable life.
In KWallet, entries are organized in Folders (or think of it as categories), and in them there are binary data, maps, passwords and a catch-all unknown. Binary entries are application-specific arrays of bytes, maps should be known from QMaps, where a series of values are accessed by keys. Passwords are simply strings, and Unknown is for everything else.
dialog.cpp
- include "dialog.h"
- include <QLayout>
- include <QLabel>
- include <QPushButton>
- include <QMap>
- include <QVBoxLayout>
- include <QSpacerItem>
Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
setLayout(new QVBoxLayout);
m_wallet = Wallet::openWallet(Wallet::NetworkWallet(),
winId(),
Wallet::Asynchronous);
QLabel *explanation = new QLabel("HELLO!
"
"Please type in something to save in the wallet!
"
"It will be saved in the form data folder, under
"
"the entry http://test.com/#form.");
m_statusLabel = new QLabel("Opening wallet...", this);
m_statusLabel->setAlignment(Qt::AlignCenter);
m_keyInput = new QLineEdit(this);
m_valueInput = new QLineEdit(this);
m_launchButton = new QPushButton("Save!", this);
m_launchButton->setDisabled(true);
layout()->addWidget(explanation);
qobject_cast<QVBoxLayout*>(layout())->addStretch();
layout()->addWidget(m_statusLabel);
layout()->addWidget(new QLabel("Key:", this));
layout()->addWidget(m_keyInput);
layout()->addWidget(new QLabel("Value:", this));
layout()->addWidget(m_valueInput);
layout()->addWidget(m_launchButton);
connect(m_launchButton, SIGNAL(clicked()), SLOT(doSave()));
connect(m_wallet, SIGNAL(walletOpened(bool)), SLOT(walletOpened(bool)));
setMinimumSize(500, 200);
}
void Dialog::walletOpened(bool ok)
{
if (ok &&
(m_wallet->hasFolder(KWallet::Wallet::FormDataFolder()) ||
m_wallet->createFolder(KWallet::Wallet::FormDataFolder())) &&
m_wallet->setFolder(KWallet::Wallet::FormDataFolder())) {
m_launchButton->setDisabled(false);
m_statusLabel->setText("Idle.");
} else
m_statusLabel->setText("Error opening wallet!");
}
void Dialog::doSave()
{
if (m_keyInput->text().isEmpty() || m_valueInput->text().isEmpty()) {
m_statusLabel->setText("Empty field!");
return;
}
m_launchButton->setDisabled(true);
m_statusLabel->setText("Saving ...");
QMap<QString, QString> map;
map[m_keyInput->text()] = m_valueInput->text();
if (m_wallet->writeMap("http://test.com/#form", map)) m_statusLabel->setText("Something went wrong!");
else {
m_statusLabel->setText("Saved!");
m_keyInput->clear();
m_valueInput->clear();
}
m_launchButton->setDisabled(false);
}
dialog.h
- ifndef DIALOG_H
- define DIALOG_H
- include <QDialog>
- include <QLabel>
- include <QLineEdit>
- include <KWallet/Wallet>
using KWallet::Wallet;
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
private slots:
void doSave();
void walletOpened(bool ok);
private:
Wallet *m_wallet;
QLineEdit *m_keyInput;
QLineEdit *m_valueInput;
QLabel *m_statusLabel;
QPushButton *m_launchButton;
};
- endif // DIALOG_H
main.cpp
- include "dialog.h"
- include <KAboutData>
- include <KApplication>
- include <KCmdLineArgs>
static KAboutData about(
"KWalletDemoApplication",
"",
ki18n("KWalletDemoApplication"),
"1.0",
ki18n("Demonstrates basic KWallet usage."),
KAboutData::License_LGPL,
ki18n("(C) 2010 Martin Sandsmark"),
KLocalizedString(),
"http://www.mts.ms/");
int main(int argc, char *argv[])
{
about.addAuthor(ki18n("Martin Sandsmark"), ki18n("Maintainer"), "[email protected]", "http://iskrembilen.com/");
KCmdLineArgs::init(argc, argv, &about);
KApplication app;
Dialog dialog;
dialog.show();
return app.exec();
}
CMakeLists.txt
project(Importer)
find_package(KDE4 REQUIRED)
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include(KDE4Defaults)
include(MacroLibrary)
include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES})
set(SRCS main.cpp dialog.cpp)
kde4_add_executable(kwallet-demo ${SRCS})
target_link_libraries(kwallet-demo ${KDE4_KDECORE_LIBS} ${KDE4_KPARTS_LIBS} ${KDE4_KDEUI_LIBS})
install(TARGETS kwallet-demo ${INSTALL_TARGETS_DEFAULT_ARGS})