关于QMainWindow
是QWidget的子类,具有QWidget的很多功能,比如setWindowIcon等,也另外单独提供了一些接口,比如设置中央窗口部件的setCentralWidget
我们实现主窗口时,都会继承自QMainWindow,比如:
class TestWindow:public QMainWindow
{
Q_OBJECT
public:
TestWindow(QWidget *parent = NULL);
private:
QMenu *m_pFileMenu;
QToolBar *m_pFileToolBar;
QAction *m_pOpenAction;
QTextEdit *m_pTextEdit;
private slots:
void open();
};
设置中央窗口部件
比如我这里设置QTextEdit为中央窗口部件
m_pTextEdit = new QTextEdit("xxx");
setCentralWidget(m_pTextEdit); //设置中央窗口部件
动作
动作可以加入到菜单、工具栏和上下文菜单中,比如我们经常使用的粘贴、复制等
我这里简单定义一个打开动作,然后将其加入到这些上述的这些菜单中去:
m_pOpenAction = new QAction("&Open",this);
m_pOpenAction->setIcon(QIcon(":/image/open"));
m_pOpenAction->setStatusTip("open action");
m_pOpenAction->setShortcut(QKeySequence::Open);
这里只是简单定义了一个动作,并没有实际行为,这里将此动作连接到自动以的open槽:
connect(m_pOpenAction,SIGNAL(triggered()),this,SLOT(open()));
void TestWindow::open()
{
QFileDialog::getOpenFileName(this,"open file",".","All file(*.*)");
}
菜单
新建一个菜单,并将前面定义的打开动作添加进来:
m_pFileMenu = menuBar()->addMenu("&File");
m_pFileMenu->addAction(m_pOpenAction);
工具栏
使用addToolBar接口可以添加一个工具项,这里加打开动作添加进来
m_pFileToolBar = addToolBar("&File");
m_pFileToolBar->addAction(m_pOpenAction);
前面设置了QTextEdit为主窗口的中央窗口部件,其实QTextEdit自带有上下文菜单,这里为了演示,不使用自带的,而是用自定义的打开动作:
//为了演示,这里不使用QTextEdit默认的上下文菜单
m_pTextEdit->addAction(m_pOpenAction);
m_pTextEdit->setContextMenuPolicy(Qt::ActionsContextMenu);
状态栏
状态栏比较简单,第一次调用statusBar()时,会创建状态栏
statusBar()->showMessage("status bar",3000);