トップ 一覧 ソース 検索 ヘルプ RSS ログイン

QtのGUIメモ(基本編)

QtGUI関係の処理をするときのメモ。メニュー・ツールバー・ステータスバーなどなど。

テストプログラムはこんな感じ。

ss001.png

1.アクションを作成

こんな感じで。

52|void        AMainWindow::createActions( void )
53|{
54|    //      アクションを作成
55|
56|    m_exit_a    = new QAction( tr("E&xit"),this );
57|    m_exit_a->setShortcut( tr("Ctrl+Q") );
58|    m_exit_a->setStatusTip( tr("Exit the application") );
59|    m_exit_a->setIcon( QIcon(":/images/exit.png") );
60|    connect( m_exit_a,SIGNAL(triggered()),this,SLOT(close()) );
61|
62|    m_about_a   = new QAction( tr("&About"),this );
63|    m_about_a->setStatusTip( tr("Show the application's About box") );
64|    m_about_a->setIcon( QIcon(":/images/icon.png") );
65|    connect( m_about_a,SIGNAL(triggered()),this, SLOT(about()) );
66|}

QtでのGUI関係の処理は『アクション作成→必要なところに登録』これが基本。しかし、アクションの数が増えると大変なことに・・・

2.メニューを作成

68|void        AMainWindow::createMenus( void )
69|{
70|    //      メニューを追加してアクションを登録
71|
72|    QMenu*  me  = NULL;
73|
74|    me  = menuBar()->addMenu( tr("&File") );
75|    me->addAction( m_exit_a );
76|
77|    me  = menuBar()->addMenu( tr("&Help") );
78|    me->addAction( m_about_a );
79|}

アクションを登録してるだけ。

3.コンテキストメニューを作成

81|void        AMainWindow::createContextMenu( void )
82|{
83|    //      ウィジットにアクションを登録
84|
85|    addAction( m_exit_a );
86|
87|    //      コンテキストメニューを表示するように設定
88|
89|    setContextMenuPolicy( Qt::ActionsContextMenu );
90|}

ウィジットに直接アクションを登録。あとはsetContextMenuPolicy()で設定を変更。コンテキストメニューを表示する方法としては、イベントを受けて自分でメニューを表示する方法もあり。

4.ツールバーを作成

092|void        AMainWindow::createToolBars( void )
093|{
094|    //      ツールバーを追加してアクションを登録
095|
096|    QToolBar*   tb  = NULL;
097|
098|    tb  = addToolBar( tr("&All") );
099|    tb->addAction( m_exit_a );
100|    tb->addAction( m_about_a );
101|}

ツールバーを作ってアクションを登録してるだけ。

5.ステータスバーを作成

103|void        AMainWindow::createStatusBar( void )
104|{
105|    //      ステータスバーを作成
106|
107|    statusBar()->showMessage( tr("Ready") );
108|}

QMainWindow::statusBar()の呼び出しで、必要に応じてステータスバーを作ってくれる。

6.QSettingsでファイルに保存

ちょっと番外編。Windowsの場合、QSettingsは標準だとレジストリにデータを保存するけど、それをプログラムと同じフォルダに変更する方法。

amainwindow.cpp
112|void        AMainWindow::settings( bool read )
113|{
114|    //      保存先を変更
115|
116|    QString     fn  = qApp->applicationDirPath() +
117|                        QDir::separator() +
118|                        tr( "test03.ini" );
119|
120|    QSettings   set( fn,QSettings::IniFormat );
121|    set.beginGroup( skGetUserName() );
122|
123|    if( read == true ) {
124|
125|        //      セッティングを復元
126|
127|        QVariant    var;
128|
129|        var = set.value( "geometry",QRect(200,200,480,320) );
130|        setGeometry( var.toRect() );
131|
132|    } else {
133|
134|        //      セッティングを保存
135|
136|        set.setValue( "geometry",geometry() );
137|    }
138|
139|    set.endGroup();
140|}

QSettings::setPath()で無理矢理パスを変更する方法は失敗(´・ω・`)

仕方がないので、QSettingsのコンストラクタでフルパスを指定する方法に。この場合、QSettingsの保存内容がすべてのユーザーで共通になっているので、ユーザー名を無理矢理取得してグループ名に使用。

ユーザー名を取得する関数ぐらい、Qtに標準であっても良いのでは?(´・ω・`)

参考になるのはこのあたり。というか、そのまんま?

ソースコードはこちら:test03a.zip


(2009/11/09 メモ,Qt