カンテラの光の下で

dNaga392's memorandom

【Vim】【Markdown】VimでMarkdownのシンタックスハイライトを使う

標準のハイライトでは*.md等のファイルはMarkdownではなく modula2 のものと判断されているらしい。

そのため、以下の記述を.vimrcに加えてあげる

autocmd BufNewFile,BufRead *.{md,mdwn,mkd,mkdn,mark*} set filetype=markdown

参考

【Qt】【QWidget】ウィジェットの画面を描画する

ウィジェットの画面を他のペイントデバイス(QPaintDeviceの派生クラス)に描画する方法です。

// QPixmapにウィジェットの表示を直接描画する方法

QWidget *w = new QWidget();

// 描画内容の設定
QLabel *lbl = new QLabel("Hello world.");
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(lbl);
w->setLayout(layout);

// 描画先の用意
// ウィジェットと同じサイズを用意
QPixmap pix(w->size());

// ウィジェットの描画
// まず表示してウィジェットの描画イベントを走らせる
w->show();
// 描画内容を複写
w->render(&pix);
// 複写内容を保存(確認用)
pix.save("hello.png");

QWidget を表示せず描画する場合は、ウィジェットに Qt::WA_DontShowOnScreen を設定します。

// QPixmapにウィジェットの内容を非表示で直接描画する方法

QWidget *w = new QWidget();

// 描画内容の設定
// (略)

// 描画先の用意
// (略)

// ウィジェットの描画
// スクリーンに表示しない設定とする
w->setAttribute(Qt::WA_DontShowOnScreen);
// showしてウィジェットの描画イベントを走らせる
w->show();
// 描画内容を複写
w->render(&pix);
// 複写内容を保存(確認用)
pix.save("hello.png");

ここまで QPixmap に描画しましたが、render関数は QPainter を引数にすることもできます。

// QPainterを介してウィジェットの表示を描画する方法

QWidget *w = new QWidget();

// 描画内容の設定
// (略)

// 描画先の用意
// ウィジェットと同じサイズを用意
QPixmap pix(w->size());
// QPainterに描画先を設定
QPainter p(&pix);

// ウィジェットの描画
// まず表示してウィジェットの描画イベントを走らせる
w->show();
// QPainterを介して描画内容を複写
w->render(&p);
// 複写内容を保存(確認用)
pix.save("hello.png");

参考

c++ - Qt: How to force a hidden widget to calculate its layout? - Stack Overflow

【Git】gitconfigの分割管理[include]

.gitconfig を管理の際にいくつかのファイルに分けたいといった場合があります。
こんなとき役立つのが[include]です。

[include]は指定したpathのファイルを展開し、.gitconfigの記述として扱います。
以下はユーザー情報をエイリアス設定を別ファイルに記述し、それらを.gitconfigで扱う例です。

# ~/.gitconfig
[include]
    # ユーザー情報
    path = .gitconfig.user
    # gitconfig本体
    path = ~/dotfiles/.gitconfig
# ~/.gitconfig.user
[user]
    name = nagatsuki
    email = nagatsuki30@gmail.com
# ~/dotfiles/.gitconfig
[alias]
    ad  = add

参考

.gitconfig で他のファイルを include - Qiita

ディレクトリの呼び方

ディレクトリ、いわゆるフォルダの呼び方について。
ディレクトリの下位のディレクトリはサブディレクトリと呼ぶけど、 上位のディレクトリはなんて呼べば良いのだろうと思い調べました。

結果から言うと「親ディレクトリ」で良いようです。

呼称(日本語) 英語名 記号
カレントディレクトリ Current Directory .
親ディレクトリ Parent Directory ..
ホームディレクトリ Home Directory ~
ルートディレクトリ Root Directory C:\
区切り文字 Directory Separator \

Path (computing) - Wikipedia, the free encyclopedia

【Qt】英国のラウンデルを描画

比率は目測です。以下のメッセージが出るのでそのままは使わないでください
QPaintDevice: Cannnot destroy paint device that being painted

QPixmap takeRAFRoundel()  
{  
    // 画像のサイズ  
    int width  = 500;  
    int height = 500;  
    QPoint center(width/2,height/2);  
    QPixmap pix(width,height);  
    QPainter *p = new QPainter(&pix);  
    // 背景を白で塗りつぶす  
    p->setPen(*(new QColor(0xFF,0xFF,0xFF,0xFF)));  
    p->fillRect(0,0,width,height,*(new QBrush(QColor(0xFF,0xFF,0xFF))));  
    // 青い丸を描く  
    p->setPen(*(new QColor(0x00,0x24,0x7D,0xFF)));  
    p->setBrush(*(new QBrush(QColor(0x00,0x24,0x7D,0xFF))));  
    // drawArcでは塗りつぶしができない  
    // そのため、drawEllipseを使う  
    p->drawEllipse(center,500/2,500/2);  
    // 白い丸を描く  
    p->setPen(*(new QColor(0xFF,0xFF,0xFF,0xFF)));  
    p->setBrush(*(new QBrush(QColor(0xFF,0xFF,0xFF,0xFF))));  
    p->drawEllipse(center,325/2,325/2);  
    // 赤い丸を描く  
    p->setPen(*(new QColor(0xCE,0x11,0x26,0xFF)));  
    p->setBrush(*(new QBrush(QColor(0xCE,0x11,0x26,0xFF))));  
    p->drawEllipse(center,150/2,150/2);  
    return pix;  
}

【Qt】【QDirIterator】サブディレクトリを含むファイル検索

QDirIterator でサブディレクトリを含むファイル検索をする。

QDirIterator::IteratorFlags を設定すればok

以下はユーザーのピクチャフォルダのjpeg,pngファイルを検索するやつ

    // ユーザーのPicturesフォルダパスを取得  
    QString dirPath = QDesktopServices::storageLocation ( QDesktopServices::PicturesLocation);  
    // 対象のファイル名フィルタ  
    QStringList nameFilters;  
    nameFilters << "*.jpg" << "*.png";  
    // ファイルフィルタ  
    QDir::Filters filters = QDir::Files;  
    // 対象フラグ  
    QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags;  
    // サブディレクトリを探索するかどうか  
    bool canSerchSubDir= true;  
    if(canSerchSubDir)  
    {  
        flags = QDirIterator::Subdirectories;  
    }  
    // イテレーターの生成  
    QDirIterator it(dirPath, nameFilters, filters, flags);  
    QStringList files;  
    while (it.hasNext())  
    {  
        QString file = it.next();  
        files << file;  
        qDebug() << file;  
    }  

c++ - Recursively iterate over all the files in a directory and its subdirectories in Qt - Stack Overflow

隠しフォルダも対象とするときは、QDir::Hidden を追加します

 filters |= QDir::Hidden

[QTBUG-30499] QDirIterator does not show "hidden" files - Qt Bug Tracker

【C/C++】typedef

typedef の末尾にのセミコロン(;)を忘れがちなので書いた。

typedef は変数名や構造体、クラスの別名を定義する。

typedef originName newName; 

単なる別名のほか、略称の設定することがよくある。

typedef originName oriName; 

他に有名なのはポインタの定義か

typedef int *PINT;

typedefの使い方
typedefの使用