Development/Tutorials/KWallet
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})