QMainWindow是一个提供主窗口程序的类,窗口包含以下部分
菜单栏的每一个menu都可以用menuBar()的addMenu()添加
fileMenu = menuBar()->addMenu("file"); //创建了file菜单
QAction
可以将QAction对象添加到菜单栏的菜单里面和下面要讲到的工具栏里面,这样一旦用户选择了这个操作,QAction的triggered(bool)
就会发出信号。图中工具栏里的各个工具均为QAction对象,可以为QAction 对象添加图标以及快捷键等。
QAction *fileOpenAction = QAction(QIcon("open.png"), "open", this);
fileOpenAction->setShortcut(tr("Ctrl+O"));
fileOpenAction->setStatusTip("Open a file");
fileMenu->addAction(fileOpenAction);
fileMenu->addSeparator(); //可以添加分隔符
这样就会在菜单栏的file菜单下出现一个图标为open.png名字为open的选项,然后就可以用connect设置相关操作
可以用addToolBar()添加一个工具条
QToolBar *fileBar = addToolBar("file");
fileBar->addAction(fileOpenAction);
工具条里不光能放QAction对象,还可以放其它的widget
用statusBar()->addWidget()添加状态栏项
QLabel *statusLabel = new QLabel("status");
statusBar()->addWidget(statusLabel);
使用槽函数显示信息,timeout单位是毫秒
//void showMessage(const QString &message, int timeout = 0)
一个主窗口只有一个中心部件,可以用setCentralWidget()设定
以下代码头文件已省略
//mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QTextEdit *mainEdit;
QTextEdit *sideEdit;
QAction *fileOpenAction;
QLabel *statusLabel;
QMenu *fileMenu;
QToolBar *fileToolBar;
QHBoxLayout *mainLayout;
private slots:
void showOpenFile();
};
//mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle("MainWindow");
//添加QAction
fileOpenAction = new QAction("open", this);
fileOpenAction->setShortcut(QString("Ctrl+O"));
fileOpenAction->setToolTip("open a new file");
connect(fileOpenAction, SIGNAL(triggered(bool)), this, SLOT(showOpenFile()));
//添加菜单
fileMenu = menuBar()->addMenu("file");
fileMenu->addAction(fileOpenAction);
//添加工具栏
fileToolBar = addToolBar("file");
fileToolBar->addAction(fileOpenAction);
//设置中心部件
mainEdit = new QTextEdit;
setCentralWidget(mainEdit);
//设置状态栏
statusLabel = new QLabel;
}
MainWindow::~MainWindow()
{
}
void MainWindow::showOpenFile()
{
statusBar()->showMessage("hello", 3000);
}