赞
踩
主窗口框架(QMainWindow)拥有自己的布局,包括以下组件:
菜单栏
菜单栏包含了一个下拉菜单项的列表,这些菜单项通过QAction动作类实现。一个主窗口只能有一个菜单栏。
工具栏
工具栏一般用于常用的菜单项,也可以插入其他窗口部件,一个主窗口可以拥有多个工具栏。
中心部件
主窗口中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域,一个主窗口只能有一个中心部件。
dock部件
dock部件又称为停靠部件,或停靠窗口,可停靠在窗口部件的四周,用来设置一些部件来实现一些功能,类似一个工具箱,一个主窗口可拥有多个dock部件。
状态栏
状态栏用于显示程序的一些状态信息,在主窗口的最底下,一个主窗口只能拥有一个状态栏。
代码添加示例。
- //菜单
- QMenu* editMenu = ui->menuBar->addMenu("编辑(&E)");
- QAction *action_copy = editMenu->addAction(QIcon("test.png"),QString("复制(&C)"));
- action_copy->setShortcut(QKeySequence("Ctrl+C"));
- //添加到主窗口工具栏——工具栏添加动作按钮
- ui->mainToolBar->addAction(action_copy);
- //动作按钮组,互斥选项,只能选择这其中的一个
- QActionGroup* group = new QActionGroup(this);
- QAction* action_L = group->addAction("左对齐(&L)");
- QAction* action_R = group->addAction("右对齐(&R)");
- QAction* action_C = group->addAction("居中对齐(&C)");
- QAction* action_J = group->addAction("两端对齐(&J)");
- //设置可选
- action_L->setCheckable(true);
- action_R->setCheckable(true);
- action_C->setCheckable(true);
- action_J->setCheckable(true);
- //菜单栏中添加分隔线
- editMenu->addSeparator();
- //添加到窗口菜单
- editMenu->addAction(action_L);
- editMenu->addAction(action_R);
- editMenu->addAction(action_C);
- editMenu->addAction(action_J);
-
- // 工具栏添加部件
- QToolButton* toolBtn = new QToolButton(this);
- toolBtn->setText("颜色");
- QMenu* colorMenu = new QMenu(this);
- colorMenu->addAction("红色");
- colorMenu->addAction("绿色");
- toolBtn->setMenu(colorMenu);
- //设置模式为弹出式菜单
- toolBtn->setPopupMode(QToolButton::MenuButtonPopup);
- ui->mainToolBar->addWidget(toolBtn);
- //添加调节大小窗口
- QSpinBox* spinBox = new QSpinBox(this);
- ui->mainToolBar->addWidget(spinBox);
- //显示临时信息
- ui->statusBar->showMessage(QString("欢迎......"),3000);
- //添加状态栏永久显示
- QLabel* tag = new QLabel("https://doraemon-hub-art.github.io");
- ui->statusBar->addPermanentWidget(tag);

自定义菜单需要定义一个继承QWidgetAction的类, 并重写createWidget方法,在该方法中自定义部件设置。
示例MyAction.h
- #ifndef MYACTION_H
- #define MYACTION_H
- #include<QWidgetAction>
- #include<QLineEdit>
-
- class MyAction : public QWidgetAction
- {
- Q_OBJECT
- public:
- MyAction(QObject* parent = 0);
- protected:
- QWidget* createWidget(QWidget* parent);
- signals:
- void getText(const QString& string);
- private slots:
- void sendText();
- private:
- QLineEdit* lineEdit;
- };
-
- #endif // MYACTION_H

MyAction.cpp
- #include "myaction.h"
- #include<QSplitter>
- #include<QLabel>
- MyAction::MyAction(QObject* parent):QWidgetAction(parent)
- {
- lineEdit = new QLineEdit;
- connect(lineEdit,&QLineEdit::returnPressed,this,&MyAction::sendText);
- }
-
- QWidget *MyAction::createWidget(QWidget *parent)
- {
- //是否继承自菜单或者工具栏
- //是则创建父部件的子部件并返回子部件
- if(parent->inherits("QMenu")||parent->inherits("QToolBar"))
- {
- QSplitter * splitter = new QSplitter(parent);
- QLabel* label = new QLabel("插入文本:");
- splitter->addWidget(label);
- splitter->addWidget(lineEdit);
- return splitter;
- }
- }
- void MyAction::sendText()
- {
- emit getText(lineEdit->text());
- lineEdit->clear();
- }

本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。