منوها و تولبارها در كيوت 4

در اين بخش از آموزش برنامه نويسي كيوت 4 ، ما درباره ي منوها و تولبارها در برنامه هاي كيوت 4 صحبت خواهيم كرد. نوار منو يكي از پركاربردترين بخش ها در برنامه هاي GUI مي باشد. كه دستوراتي در گروه هاي مختلف مي باشند كه هر كدام در جاي خود قرار گرفته اند. نوا ابزار دسترسي سريع به بيشترين دستوراتي كه خيلي اوقات استفاده مي شود را فراهم مي كند.

منوي ساده
در مثال اول يك منوي ساده را مشخص مي كنيم.
simplemenu.h
#ifndef SIMPLEMENU_H
#define SIMPLEMENU_H

#include <QMainWindow>
#include <QApplication>

class SimpleMenu : public QMainWindow
{
public:
SimpleMenu(QWidget *parent = 0);

};

#endif

فايل سرآيند براي مثال كد ما
simplemenu.cpp
#include "simplemenu.h"
#include <QMenu>
#include <QMenuBar>


SimpleMenu::SimpleMenu(QWidget *parent)
: QMainWindow(parent)
{
QAction *quit = new QAction("&Quit", this);

QMenu *file;
file = menuBar()->addMenu("&File");
file->addAction(quit);

connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
}

ما يك نوار منو داريم
QAction *quit = new QAction("&Quit", this);

يك اكشن و يك منو، بايد ما براي كار با منوها از ويدجت QMainWindow به ارث ببريم.
QMenu *file;
file = menuBar()->addMenu("&File");

در اين خط كد ما يك QAction ايجاد مي كنيم. هر QMenu يك يا چندين شي اكشن توليد مي كند.
file->addAction(quit);

ما يك اكشن در منو درج مي كنيم.
connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));

زماني كه ما يك option را از منو انتخاب مي كنيم برنامه خاتمه مي يابد.
main.cpp
#include "simplemenu.h"


int main(int argc, char *argv[])
{
QApplication app(argc, argv);

SimpleMenu window;

window.resize(250, 150);
window.move(300, 300);
window.setWindowTitle("Simple menu");
window.show();

return app.exec();
}

فايل اصلي

تصوير: منو ساده

جدا كننده ها ،‌ شورتكات ها و آيكون ها
در مثال زير ما با اضافه كردن آيكون ها و منوها وسايل اجراي برنامه مان را افزايش مي دهيم و از جداكننده ها و شورتكات ها استفاده مي كنيم.
anothermenu.h
#ifndef ANOTHERMENU_H
#define ANOTHERMENU_H

#include <QMainWindow>
#include <QApplication>

class AnotherMenu : public QMainWindow
{
public:
AnotherMenu(QWidget *parent = 0);

};

#endif

فايل سرآيند براي مثال ما
anothermenu.cpp
#include "anothermenu.h"
#include <QMenu>
#include <QMenuBar>


AnotherMenu::AnotherMenu(QWidget *parent)
: QMainWindow(parent)
{
QPixmap newpix("new.png");
QPixmap openpix("open.png");
QPixmap quitpix("quit.png");

QAction *newa = new QAction(newpix, "&New", this);
QAction *open = new QAction(openpix, "&Open", this);
QAction *quit = new QAction(quitpix, "&Quit", this);
quit->setShortcut(tr("CTRL+Q"));

QMenu *file;
file = menuBar()->addMenu("&File");
file->addAction(newa);
file->addAction(open);
file->addSeparator();
file->addAction(quit);

connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
}

در اين مثال ما يك منو همراه سه اكشن داريم . در واقع با انتخاب آن تنها كاري انجام مي دهد عمل خروج است.ما همچنين يك جداكننده و يك ميانبر Ctrl + Q ايجاد مي كنيم، كه برنامه را خاتمه مي دهد.
QPixmap newpix("new.png");
QPixmap openpix("open.png");
QPixmap quitpix("quit.png");

اين تصاوير در منوها استفاده شده اند. توجه كنيد كه برخي محيط هاي دسكتاپ توانايي نمايش عكس در من را ندارند.
QAction *newa = new QAction(newpix, "&New", this);
QAction *open = new QAction(openpix, "&Open", this);
QAction *quit = new QAction(quitpix, "&Quit", this);

در اين كد ما از سازنده QAction با Pixmap در آرگومان اول استفاده مي كنيم.
quit->setShortcut(tr("CTRL+Q"));

اينجا ما يك شورتكات از صفحه كليد ايجاد مي كنيم.كه توسط فشار آن اكشن كيوت كه باعث خاتمه برنامه مي شود ايجاد خواهد شد.
file->addSeparator();

ما يك جدا كننده ايجاد مي كنيم ، اين جدا كننده يك خط افقي مي باشد كه ما را در گروهبندي اكشن هاي منو كمك مي كند.
main.cpp
#include "anothermenu.h"


int main(int argc, char *argv[])
{
QApplication app(argc, argv);

AnotherMenu window;

window.resize(350, 200);
window.move(300, 300);
window.setWindowTitle("Another menu");
window.show();

return app.exec();
}

فايل اصلي

تصوير: مثالي ديگر از منو

منوهايي با قابليت تيك خوردن
در مثال بعد ما يك منو چكباكسي را ايجاد مي كنيم.اين يك اكشن همراه يك chackable مي باشد كه امكان آشكار يا نهان كردن نوار وظيف را اضافه مي كند.
checkable.h
#ifndef CHECKABLE_H
#define CHECKABLE_H

#include <QMainWindow>
#include <QApplication>

class Checkable : public QMainWindow
{
Q_OBJECT

public:
Checkable(QWidget *parent = 0);

private slots:
void toggleStatusbar();

private:
QAction *viewst;

};

#endif

فايل سرآيند مثال
checkable.cpp
#include "checkable.h"
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>


Checkable::Checkable(QWidget *parent)
: QMainWindow(parent)
{

viewst = new QAction("&View statusbar", this);
viewst->setCheckable(true);
viewst->setChecked(true);

QMenu *file;
file = menuBar()->addMenu("&File");
file->addAction(viewst);

statusBar();

connect(viewst, SIGNAL(triggered()), this,
SLOT(toggleStatusbar()));

}

void Checkable::toggleStatusbar()
{
if (viewst->isChecked())
statusBar()->show();
else
statusBar()->hide();
}

آيتم منوي chackable براي نمايان ساختن نوار وضعيت مي باشد.
viewst = new QAction("&View statusbar", this);
viewst->setCheckable(true);
viewst->setChecked(true);

درون متد toggleStatusbar() ما تعيين مي كنيم اگر آيتم منو چك خورده باشد نوار وضعيت مخفي باشد يا نمايش داده شود.
if (viewst->isChecked())
statusBar()->show();
else
statusBar()->hide();

فايل اصلي

تصوير: منو Chackable

QToolbar
QToolbar پنلي با قابليت حركت دادن مهيا مي كند. كه شامل كنترل هايي براي دسترسي سريع تر به اكشن هاي برنامه كاربردي مي باشد.
toolbar.h
#ifndef TOOLBAR_H
#define TOOLBAR_H

#include <QMainWindow>
#include <QApplication>

class Toolbar : public QMainWindow
{
Q_OBJECT

public:
Toolbar(QWidget *parent = 0);

};

#endif

فايل سرآيند مثال
toolbar.cpp
#include "toolbar.h"
#include <QToolBar>
#include <QIcon>
#include <QAction>


Toolbar::Toolbar(QWidget *parent)
: QMainWindow(parent)
{
QPixmap newpix("new.png");
QPixmap openpix("open.png");
QPixmap quitpix("quit.png");

QToolBar *toolbar = addToolBar("main toolbar");
toolbar->addAction(QIcon(newpix), "New File");
toolbar->addAction(QIcon(openpix), "Open File");
toolbar->addSeparator();
QAction *quit = toolbar->addAction(QIcon(quitpix),
"Quit Application");

connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
}

يك تولبار ايجاد مي كنيم كه از ويدجت QMainWindow به ارث مي بريم.
QToolBar *toolbar = addToolBar("main toolbar");

متد addToolBar() يك تولبار ايجاد كرده و از آن يك اشاره گر برمي گرداند.
toolbar->addAction(QIcon(newpix), "New File");
toolbar->addAction(QIcon(openpix), "Open File");
toolbar->addSeparator();

اينجا ما دو اكشن و يك جداكننده به تولبار اضافه مي كنيم.
main.cpp
#include "toolbar.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

Toolbar window;

window.resize(300, 200);
window.move(300, 300);
window.setWindowTitle("QToolBar");
window.show();

return app.exec();
}

فايل اصلي

تصوير: QToolbar

ساختمان نرم افزار
در آخر اين بخش از آموزش برنامه نويسي ++C ما كالبد يك نرم افزار را ايجاد مي كنيم. اين مثال در واقع بر روي ويدجت QMainWindow ايجاد شده است.
skeleton.h
#ifndef SKELETON_H
#define SKELETON_H

#include <QMainWindow>
#include <QApplication>

class Skeleton : public QMainWindow
{
Q_OBJECT

public:
Skeleton(QWidget *parent = 0);

};

#endif

فايل سرآيند براي اين مثال
skeleton.cpp
#include "skeleton.h"
#include <QToolBar>
#include <QIcon>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QTextEdit>


Skeleton::Skeleton(QWidget *parent)
: QMainWindow(parent)
{
QPixmap newpix("new.png");
QPixmap openpix("open.png");
QPixmap quitpix("quit.png");

QAction *quit = new QAction("&Quit", this);

QMenu *file;
file = menuBar()->addMenu("&File");
file->addAction(quit);

connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));

QToolBar *toolbar = addToolBar("main toolbar");
toolbar->addAction(QIcon(newpix), "New File");
toolbar->addAction(QIcon(openpix), "Open File");
toolbar->addSeparator();

QAction *quit2 = toolbar->addAction(QIcon(quitpix),
"Quit Application");
connect(quit2, SIGNAL(triggered()), qApp, SLOT(quit()));

QTextEdit *edit = new QTextEdit(this);

setCentralWidget(edit);

statusBar()->showMessage("Ready");
}

اينجا ما يك منو و نوار ابزار و يك نوار وظيفه ايجاد مي كنيم.
QTextEdit *edit = new QTextEdit(this);  
setCentralWidget(edit);

ما يك ويدجت QTextEdit در مكاني دقيقا در مركز ويدجت QMainWindow ايجاد مي كنيم.
main.cpp
#include "skeleton.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

Skeleton window;

window.resize(350, 250);
window.move(300, 300);
window.setWindowTitle("Application skeleton");
window.show();

return app.exec();
}


فايل اصلي

تصوير: اسكلت برنامه

در اين بخش از آموزش كيوت ما منوها و نوار ابزارها را پوشش داديم.

پايان بخش Menus and Toolbars