KDEアプリケーションを作る際の小技をメモしておきます。
内部で作業中の時にカーソルの形状を変えます。
QApplication::setOverrideCursor( Qt::waitCursor ); (作業) QApplication::restoreOverrideCursor();
QStringをある文字で分割してQStringListに格納する方法です。
#include <qstring.h>
#include <qstringlist.h>
QStringList list = QStringList::split( "\t", QString("あいうえお\tかきくけこ\tさしすせそ") );
リモートから取得した一時ファイルを開き、作業が終わったら一時ファイルを消します。
#include <kurl.h> #include <kio/netaccess.h> QString filename; KURL url = ???; KIO::NetAccess::download( url, filename ); (作業) KIO::NetAccess::removeTempFile( filename );
一時ファイルに保存したあとリモートにアップロードします。
#include <kurl.h> #include <kio/netaccess.h> #include <ktempfile.h> KURL url = ???; KTempFile tmpfile; tmpfile.setAutoDelete( true ); QString filefame = tmpfile.name(); (作業) KIO::NetAccess::upload( filename, url );
ポップアップメニューをXMLGUIファクトリーから使うにはまず以下のようなXMLを書きます。
<Menu name="popup_menu">
<Action name="???"/>
</Menu>
これをKMainWindowで以下のように取得します。
KPopupMenu* popup = factory()->container( "popup_menu", this );
Qtで`ls -l`みたいな結果を得る方法です。
#include <qprocess.h> proc = new QProcess( this ); proc->addArgument( "ls" ); proc->addArgument( "-l" ); connect( proc, SIGNAL( readyReadStdout() ), this, SLOT( slotReadStdout() ) ); proc->start();
として、以下のようなスロットで出力結果を得ることができます。
void ClassName::slotReadStdout()
{
while( proc->canReadLineStdout() ){
QString line( proc->readLineStdout() );
}
}
ファイルのサイズを取得する方法としてまず思い付くのが QFileInfoクラスの size()メソッドを利用する方法です。
uint getSize( QString str /* path */ )
{
QFileInfo info( str );
return info.size();
}
しかし、この方法ではuintの範囲(約3.7GB?)までしか取得できません。 で、色々調べた結果以下のようにKIO::KFileItemクラスを使うことでそれ以上のサイズを取得することができました。
unsigned long long getSize( QString str /* path */ )
{
KURL url( str );
KFileItem item( KFileItem::Unknown, KFileItem::Unknown, url );
return (unsigned long long)item.size();
}
kdDebug() にusigned long long型の変数を表示させようとするとコンパイル時にエラーがでました。 が、以下のようにするとうまく表示できます。
unsigned long long l = 16907753271; kdDebug() << QString::number( l ) << endl;
KProgressDialogクラスをつかった最小限のサンプルです。 ラベルが表示されない、ボタンが表示されないなどの問題に悩まされたのですが、以下のコードをループのなかに埋め込むことで解決しました。
kapp->processEvents();
kappは<kapplication.h>内で定義されているグローバル変数です。 QApplication::processEvents()を呼ぶことで処理待ちのイベント(描画等)を処理することができます。 Visual Basicで言うところのDoEventsにあたります。
サンプルダウンロード:kprogressdialogtest-0.1.0.tar.gz
ダイアログでOKボタンを押された時に、エラーチェックや保存等の処理をする場合はslotOkをオーバーライドします。 特に目新しいことではないのですが・・・。
void ClassName::slotOk()
{
// エラーチェックをし、エラーがあったら処理を中断
if( isError() ) return;
// 保存処理をし、不成功だったら処理を中断
if( !saveConfig() ) return;
// 正常な時は通常のOKボタンの処理をする
KDialogBase::slotOk();
}
KRunクラスを使うと簡単にできます。
void ClassName::openURL( const KURL& url )
{
(new KRun( url ))->setAutoDelete( true );
}
KreetingKardをCVSで管理することにした時のメモです。
$ ssh-keygen -t rsa1 で公開鍵(~/.ssh/identity.pub)を作成
Change Authorized Keysに公開鍵を入力
以下の内容で~/.cvsignoreを作成
Makefile Makefile.in acinclude.m4 aclocal.m4 autom4te.cache config.h config.h.in config.log config.status configure configure.files configure.in libtool stamp-h.in stamp-h1 subdirs kreetingkard.kdevelop.pcs kreetingkard.kdevses
CVSにも含めるため作業ディレクトリにもコピー
ローカルの開発ディレクトリ hoge/kreetingkard/ に移動
次のコマンドを実行すると「Permission denied (publickey,keyboard-interactive)」と出るので /etc/ssh/ssh_conf を編集してSSH1を優先にする。
Protocol 1,2
$ cvs -d:ext:stasuku@cvs.sourceforge.jp:/cvsroot/kreetingkard import kreetingkard vendor start I kreetingkard/aclocal.m4 I kreetingkard/kreetingkard.kdevses I kreetingkard/configure I kreetingkard/autom4te.cache I kreetingkard/configure.in I kreetingkard/subdirs I kreetingkard/Makefile.in I kreetingkard/configure.files I kreetingkard/config.h.in I kreetingkard/acinclude.m4 I kreetingkard/stamp-h.in I kreetingkard/kreetingkard.kdevelop.pcs I kreetingkard/po/Makefile.in I kreetingkard/doc/Makefile.in I kreetingkard/doc/en/Makefile.in I kreetingkard/src/Makefile.in I kreetingkard/admin/CVS N kreetingkard/Doxyfile N kreetingkard/COPYING N kreetingkard/ChangeLog N kreetingkard/.cvsignore N kreetingkard/INSTALL N kreetingkard/kreetingkard.kdevelop N kreetingkard/AUTHORS N kreetingkard/Makefile.cvs N kreetingkard/configure.in.in N kreetingkard/Makefile.am N kreetingkard/README N kreetingkard/TODO N kreetingkard/NEWS cvs import: Importing /cvsroot/kreetingkard/kreetingkard/templates N kreetingkard/templates/cpp N kreetingkard/templates/h cvs import: Importing /cvsroot/kreetingkard/kreetingkard/admin N kreetingkard/admin/configure.in.bot.end N kreetingkard/admin/Doxyfile.am N kreetingkard/admin/ChangeLog N kreetingkard/admin/detect-autoconf.sh N kreetingkard/admin/debianrules N kreetingkard/admin/cvs-clean.pl N kreetingkard/admin/ylwrap N kreetingkard/admin/libtool.m4.in N kreetingkard/admin/am_edit N kreetingkard/admin/conf.change.pl N kreetingkard/admin/nmcheck N kreetingkard/admin/bcheck.pl N kreetingkard/admin/cvs.sh N kreetingkard/admin/mkinstalldirs N kreetingkard/admin/missing N kreetingkard/admin/config.sub N kreetingkard/admin/install-sh N kreetingkard/admin/acinclude.m4.in N kreetingkard/admin/config.guess N kreetingkard/admin/configure.in.min N kreetingkard/admin/config.pl N kreetingkard/admin/ltmain.sh N kreetingkard/admin/Makefile.common N kreetingkard/admin/depcomp N kreetingkard/admin/Doxyfile.global N kreetingkard/admin/compile cvs import: Importing /cvsroot/kreetingkard/kreetingkard/src N kreetingkard/src/kreetingkardui.rc N kreetingkard/src/kkpropertyitemimage.cpp N kreetingkard/src/kkcmdname.cpp N kreetingkard/src/kkwidget.h N kreetingkard/src/dlgfilenew.h N kreetingkard/src/kkcmdinsert.h N kreetingkard/src/simpleP.kk N kreetingkard/src/simpleL.kk N kreetingkard/src/dlgaddressbook.cpp N kreetingkard/src/kkpropertyitemtextfont.h N kreetingkard/src/kkpropertyitemorientation.cpp N kreetingkard/src/dlgfilenew.cpp N kreetingkard/src/kkcmdtext.h N kreetingkard/src/kkcmdsize.h N kreetingkard/src/dlgprint.cpp N kreetingkard/src/kkcmdbase.cpp N kreetingkard/src/kkcmdtextfont.h N kreetingkard/src/hi16-app-kreetingkard.png N kreetingkard/src/kkcmdimageprint.h N kreetingkard/src/kkpropertyitemname.cpp N kreetingkard/src/kkcmdname.h N kreetingkard/src/kreetingkard.lsm N kreetingkard/src/kreetingkard.cpp N kreetingkard/src/kkview.h N kreetingkard/src/kkpropertyitembase.cpp N kreetingkard/src/kkpropertyitemimageprint.h N kreetingkard/src/kkcmdlocation.cpp N kreetingkard/src/kksizehandlerwidget.h N kreetingkard/src/dlgpreferences.cpp N kreetingkard/src/kkproperty.cpp N kreetingkard/src/kkpropertyitemtextalign.h N kreetingkard/src/simpleP.png N kreetingkard/src/kkcmdimage.h N kreetingkard/src/simpleL.png N kreetingkard/src/kkcmdbase.h N kreetingkard/src/emptyP.kk N kreetingkard/src/emptyL.kk N kreetingkard/src/kkpropertyitemlocation.cpp N kreetingkard/src/kkitem.h N kreetingkard/src/kkcmdtextorientation.cpp N kreetingkard/src/kkcmdtextcolor.cpp N kreetingkard/src/address.cpp N kreetingkard/src/kkpropertyitemtextcolor.cpp N kreetingkard/src/kkcmdtextorientation.h N kreetingkard/src/dlgaddressbook.h N kreetingkard/src/kkcmddatafield.cpp N kreetingkard/src/kkpropertyitemdatafield.cpp N kreetingkard/src/kksizehandler.h N kreetingkard/src/hi32-app-kreetingkard.png N kreetingkard/src/kkcmdimage.cpp N kreetingkard/src/Makefile.am N kreetingkard/src/kkpropertyitemorientation.h N kreetingkard/src/kkproperty.h N kreetingkard/src/dlgpreferences.h N kreetingkard/src/kkpropertyitemtext.h N kreetingkard/src/kkpropertyitemsize.h N kreetingkard/src/kkcmdtext.cpp N kreetingkard/src/kkview.cpp N kreetingkard/src/kkcmdtextcolor.h N kreetingkard/src/kkcmdsize.cpp N kreetingkard/src/kkcmddatafield.h N kreetingkard/src/dlgprint.h N kreetingkard/src/splash.png N kreetingkard/src/main.cpp N kreetingkard/src/kkpropertyitemname.h N kreetingkard/src/kkpropertyitemlocation.h N kreetingkard/src/kkcmdtextfont.cpp N kreetingkard/src/kksizehandlerwidget.cpp N kreetingkard/src/emptyP.png N kreetingkard/src/emptyL.png N kreetingkard/src/kkcmdlocation.h N kreetingkard/src/kkpropertyitemtext.cpp N kreetingkard/src/kkpropertyitemsize.cpp N kreetingkard/src/zipcode.cpp N kreetingkard/src/kkpropertyitemtextfont.cpp N kreetingkard/src/address.h N kreetingkard/src/kkcmdimageprint.cpp N kreetingkard/src/kkcmdremove.cpp N kreetingkard/src/kkpropertyitembase.h N kreetingkard/src/kkcmdinsert.cpp N kreetingkard/src/kreetingkard.desktop N kreetingkard/src/kkpropertyitemimageprint.cpp N kreetingkard/src/kkitem.cpp N kreetingkard/src/kkpropertyitemtextorientation.h N kreetingkard/src/kkdoc.h N kreetingkard/src/kkcmdtextalign.cpp N kreetingkard/src/kkpropertyitemimage.h N kreetingkard/src/kkpropertyitemtextalign.cpp N kreetingkard/src/kkpropertyitemtextorientation.cpp N kreetingkard/src/kkwidget.cpp N kreetingkard/src/kkcmdremove.h N kreetingkard/src/kkcmdtextalign.h N kreetingkard/src/kreetingkard.h N kreetingkard/src/zipcode.h N kreetingkard/src/kksizehandler.cpp N kreetingkard/src/kkpropertyitemtextcolor.h N kreetingkard/src/kkdoc.cpp N kreetingkard/src/kkpropertyitemdatafield.h cvs import: Importing /cvsroot/kreetingkard/kreetingkard/doc N kreetingkard/doc/Makefile.am cvs import: Importing /cvsroot/kreetingkard/kreetingkard/doc/en N kreetingkard/doc/en/index.docbook N kreetingkard/doc/en/Makefile.am cvs import: Importing /cvsroot/kreetingkard/kreetingkard/po N kreetingkard/po/Makefile.am No conflicts created by this import
KreetingKardをCVSで管理することにした時のメモです。
kreetingkard.kdevelopをKDevelopで開き、 メニュー>プロジェクト>プロジェクトオプション>プラグイン にCVSなんとかっていうのを発見してチェックをいれた。 左側のアイコンビューにCVSサービスという項目が現れたので リモートシェルに「ssh」 サーバーの場所に「:ext:stasuku@cvs.sourceforge.jp:/cvsroot/kreetingkard」 で、KDevelopのメイン画面で左側のタブのファイルセレクタを選択し、 kreetingkard.kdevelopを 右クリックし、CVSサービスのなかの項目を選択すると 「この機能を使う前にローカルのワークコピーディレクトリを設置する必要があります。」 とエラーメッセージがでたが、プロジェクトを開き直すと使えるようになった。
KSystemTrayクラスを利用して最小限のサンプルを作成しました。 メインの部分のみ載せます。
KSystemTrayTest::KSystemTrayTest()
: KMainWindow( 0, "KSystemTrayTest" )
{
m_tray = new KSystemTray( this );
m_tray->setText( "ab" );
m_tray->show();
connect( m_tray, SIGNAL( quitSelected() ), this, SLOT( hide() ) );
}
bool KSystemTrayTest::queryClose()
{
if( isVisible() )
{
hide();
return false;
}
return true;
}
サンプルダウンロード:ksystemtraytest-0.1.0.tar.gz
KNotifyの機能を使う方法です。
/* プログラム */ #include <knotifyclient.h> KNotifyClient::event( winId(), "タイトル", i18n( "メッセージ" ) );
# sounds/Makefile.am soundsdir = $(kde_datadir)/application_name/sounds sounds_DATA = a.ogg EXTRA_DIST = $(sounds_DATA) appdatadir = $(kde_datadir)/application_name appdata_DATA = eventsrc
# sounds/eventsrc [!Global!] IconName=application_name Comment=Application_Comment Comment[ja]=アプリケーションの説明 [Notify1] Name=notify_name Name[ja]=通知名 Comment=notify_comment Comment[ja]=通知の説明 default_sound=a.ogg default_presentation=1
ドキュメントはKNotifyClientを参照。
データに改行を含まない場合は以下のように読み込めます。
QFile file( filename );
if( !file.open( IO_ReadOnly ) )
{
// Error
return;
}
QStringList lines;
QTextStream stream( &file );
QString line;
QRegExp rx( "((\"(?:[^\"]|\"\")*\"|[^,]*)[,|\\n])" );
for( int i = 0; !stream.atEnd(); i++ )
{
line = stream.readLine() + "\n";
for( int j = 0; rx.search( line ) > -1; j++ )
{
QString cell = rx.cap( 2 );
line = line.mid( rx.cap( 1 ).length() );
if( cell.left( 1 ) == "\"" && cell.right( 1 ) == "\"" )
{
cell = cell.mid( 1, cell.length() - 2 );
cell = cell.replace( "\"\"", "\"" );
}
kdDebug() << "( " << i << ", " << j << " ) = " << cell << endl;
}
file.close();
}
参照:Perlメモ - CSV形式の行から値のリストを取り出す
*.aa を Kaa というアプリケーションに登録するためには以下の作業が必要です。 x-kaa.desktopの追加
[Desktop Entry] Encoding=UTF-8 Type=MimeType MimeType=application/x-aa Icon=kaa_doc Patterns=*.aa DefaultApp=kaa Comment= Do aa
hi[16|32]-mime-kaa_doc.png みたいなアイコンの追加をします。
kaa.desktop にエントリの追加
MimeType=application/x-kaa Patterns=*.aa;
Makefile.am に以下を追加
mimedir = $(kde_mimedir)/application mime_DATA = x-kaa.desktop
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 3 | 文化の日 | |||||
| 23 | 勤労感謝の日 | |||||
| 24 | 振替休日 | |||||
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | ||||||
KDE3.0アプリケーションプログラミング
私はこの本で勉強しました
★★★☆☆
30日でできる! OS自作入門
OS作りがこんなにも身近に!
★★★★★
CVSデスクトップリファレンス
あれってどうするんだっけ?というときに便利です。
★★☆☆☆
正規表現デスクトップリファレンス
具体的な文法や利用法がコンパクトにまとまっています。
★★★☆☆
UNIXシステム管理
様々なUNIXの管理をするための情報が網羅されています。
★★★☆☆
入門 Qt 4 プログラミング
Qt4 開発者必携
★★★★★
make 改訂版
make様サマですね
★★★★☆
フルスクラッチによるグラフィックスプログラミング入門
0から画像処理のプログラミングが学べます
★★★★☆
OpenCV プログラミングブック
コンピューターで視る
★★★☆☆
PostgreSQL完全攻略ガイド
データベース使いを目指して
★★★★☆
Running Linux
Linuxを本格的に使う方は見逃せない一冊です。
★★★★☆
プロ論。
仕事と人生に対する強烈なメッセージ集
★★★★☆
SQLite入門 すぐに使える軽快・軽量データベース・エンジン
SQLite のすべてがわかる、充実の1冊!!
★★★★★
SELinux徹底ガイド
まだ読んでません
☆☆☆☆☆
標準ウェブ・ユーザビリティ辞典
見る人に優しいサイト作り
★★★☆☆
LHAとZIP
理論、実装ともに興味深いです
★★★☆☆
Qt GUIプログラミング
豊富な例と重要なテクニックがぎっしりです。Qt開発者必読。あれもこれも直したい…。
★★★★☆
Copyright © 2025 Linux-Life.net