QT创建QMainWindow窗口和使用资源文件

QMainWindow

简介

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。

菜单栏

  1. 创建菜单栏,在QMainWindow类内提供的有方法menuBar();
//只能有一个菜单栏
 QMenuBar * menubar = menuBar();
  1. 创建了菜单栏后,需要在所创建的QMainWindow窗口类内使用
    void setMenuBar(QMenuBar *menuBar),才能在窗口内显示菜单栏。,类似于绑定
//设置菜单栏
setMenuBar(menubar );
  1. 设置了窗口的菜单栏后,就可以添加菜单栏的内容,使用三种类型的重载addMenu来添加菜单栏内容
//addMenu函数原型
//QAction *addMenu(QMenu *menu)
//QMenu *addMenu(const QString &title)
//QMenu *addMenu(const QIcon &icon, const QString &title)
//例如我们添加菜单栏内容为,使用一个QMenu对象来接收对象,为下一步的给菜单栏内容添加行为
QMenu * menunew = addMenu("新建");
QMenu * menuopen = addMenu("打开")

4.设置完成菜单栏内容后,需要使用addAction()给菜单添加行为,addAction函数在QActionGroup类内。使用addSeparator()添加分隔符,在QMenu类内

//重载三个函数
 QAction *addAction(QAction *action)
 QAction *addAction(const QString &text)
 QAction *addAction(const QIcon &icon, const QString &text)
//例如使用上一步接收到的Qmenu对象来填加行为
QAction * newfileaction = menunew->addAction("新建文件");
QAction * newprojectaction = menunew->addAction("新建工程");

//添加分隔符
//菜单内容函数原型
QAction *addSeparator()
menunew->addSeparator();

工具栏

  1. 主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的的方式,也可根据需要进行工具条的划分。创建工具栏,在QMainWindow类内没有对应的放大,所以我们需要自己在堆内开辟一块内存,来进行工具栏的一些设置。
//QToolBar的构造函数
QToolBar(QWidget *parent = nullptr)
 QToolBar(const QString &title, QWidget *parent = nullptr)
 
 //我们用来第一个函数来创建对象
QToolBar * toolbar = new QToolBar();

2.将工具栏添加到QMainWindow中,使用addToolBar()函数

//三种不同类型的函数重载
 void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
 void addToolBar(QToolBar *toolbar)
 QToolBar *addToolBar(const QString &title)
//我们使用第一、二种
//第一种
addToolBar(toolbar);
//第二种
//需要额外提供一个工具栏的初始位置
/*
ConstantValue
Qt::LeftToolBarArea			0x1
Qt::RightToolBarArea		0x2
Qt::TopToolBarArea			0x4
Qt::BottomToolBarArea		0x8
Qt::AllToolBarAreas			ToolBarArea_Mask
Qt::NoToolBarArea			0
*/
//我们设置初始位置在左边
addToolBar(QT::LeftToolBarArea,toolbar);
  1. 使用addAction()函数添加行为,函数在QActionGroup类内
//addAction函数原型
 QAction *addAction(QAction *action)
 QAction *addAction(const QString &text)
 QAction *addAction(const QIcon &icon, const QString &text)

//使用示例
toolbar->addAction("新建");
toolbar->addAction(newfileaction);		//使用了菜单栏中给菜单添加内容的行为
  1. 设置工具栏的一些属性,例如是否可以移动,可以移动的范围等
//函数原型
 void setAllowedAreas(Qt::ToolBarAreas areas)  //设置工具栏可以移动的范围
 void setFloatable(bool floatable)	//设置是否可以浮动
 void setMovable(bool movable)		//设置是否可以移动
//示例
//可以移动的范围
/*
Qt::LeftToolBarArea			0x1
Qt::RightToolBarArea		0x2
Qt::TopToolBarArea			0x4
Qt::BottomToolBarArea		0x8
Qt::AllToolBarAreas			ToolBarArea_Mask
Qt::NoToolBarArea			0
*/
//设置可以移动的范围
toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
//设置是否可以浮动
toolbar->setFloatable(false);		//填写bool值类型
//设置是否可以移动
toolbar->setMovable(false);			//填写bool值类型

4.我们开可以想工具栏中添加一些小组件,如按钮组件

//函数原型
 QAction *addWidget(QWidget *widget)
//示例
QPushButton * pushbutton = new QPushButton("aa",this);
toolbar->addWidget(pushbutton );

状态栏

  1. 创建状态栏对象,因为QMainWindow类内没有提供创建状态栏的方法,我们需要在堆区开辟一块内存,用于存放状态栏内容
//QStatusBar构造函数原型
QStatusBar(QWidget *parent = nullptr)

//示例
QStatusBar * statusbar = new QStatusBar();		//创建一个QStatusBar对象指针
  1. 将创建的状态栏添加到QMainWindow对象上,使用setStatusBar函数
//函数原型
 void setStatusBar(QStatusBar *statusbar);

//示例
setStatusBar(statusbar );
  1. 向状态栏内添加控件,使用addPermanentWidget()和
    addWidget()函数
//函数原型
 void addPermanentWidget(QWidget *widget, int stretch = 0)
 void addWidget(QWidget *widget, int stretch = 0)

//示例
//首先创建一个小部件
QLabel * labelleft = QLabel("字数"this);
QLabel * labelright = QLabel("剩余字数"this);
addWidget(labelleft );		//在状态栏左侧添加控件
addPermanentWidget(labelright );	//在状态栏右侧添加控件

铆接部件(浮动窗口)

  1. 创建浮动窗口对象,因为QMainWindow类内没有对象的构造方法,使用在对区内开辟空间实现。
//构造函数原型
QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
 QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

//示例
QDockWidget * dockwidget = new QDockWidget("浮动",this);
  1. 使用addDockWidget()函数,将铆接部件添加到QMainWindow对象上
//函数原型
 void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
 void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
//示例
/* 可以铆接的范围
t::LeftDockWidgetArea		0x1
Qt::RightDockWidgetArea		0x2
Qt::TopDockWidgetArea		0x4
Qt::BottomDockWidgetArea	0x8
Qt::AllDockWidgetAreas		DockWidgetArea_Mask
Qt::NoDockWidgetArea		0
*/
addDockWidget(LeftDockWidgetArea0x1|TopDockWidgetArea,dockwidget);
  1. 其余操作例如设置后期允许停靠的范围
//函数原型
 void setAllowedAreas(Qt::DockWidgetAreas areas)

//示例
/* 可以浮动的范围
t::LeftDockWidgetArea		0x1
Qt::RightDockWidgetArea		0x2
Qt::TopDockWidgetArea		0x4
Qt::BottomDockWidgetArea	0x8
Qt::AllDockWidgetAreas		DockWidgetArea_Mask
Qt::NoDockWidgetArea		0
*/
dockwidget->setAllowedAreas(BottomDockWidgetArea);

中心部件

除了以上几个部件,中心显示的部件都可以作为核心部件,例如一个记事本文件,可以利用QTextEdit做核心部件

  1. 创建一个记事本文件,使用QTextEdit()函数;
//函数原型
QTextEdit(const QString &text, QWidget *parent = nullptr)
 QTextEdit(QWidget *parent = nullptr)
//示例
//创建一个记事本对象
QTextEdit * textedit = new QTextEdit("记事本"this);
  1. 将记事本对象添加到QMainWindow对象内,使用 setCentralWidget()设置为QMainWindow对象的中心部件
//函数原型
 void setCentralWidget(QWidget *widget)
 
//示例
setCentralWidget(textedit );

总结

一个QMainWindows对象

  1. 只能拥有一个的东西:菜单栏、状态栏、中心部件 ,这些都是使用set~~~方法,使之联系到QMainWindows对象上
  2. 可以拥有多个的东西:工具栏、铆接部件,这些都是使用add~~~方法,使之联系到QMainWindows对象上

使用资源文件

添加文件

  1. 先将文件夹拷贝到工程目录下。QT创建QMainWindow窗口和使用资源文件_第1张图片

  2. 在工程中添加新文件
    QT创建QMainWindow窗口和使用资源文件_第2张图片

  3. 选择添加资源文件
    QT创建QMainWindow窗口和使用资源文件_第3张图片

  4. 输入名字
    QT创建QMainWindow窗口和使用资源文件_第4张图片

  5. 添加资源的前缀
    QT创建QMainWindow窗口和使用资源文件_第5张图片

  6. 添加文件
    QT创建QMainWindow窗口和使用资源文件_第6张图片

  7. 选择添加的文件
    QT创建QMainWindow窗口和使用资源文件_第7张图片

  8. 添加完成
    QT创建QMainWindow窗口和使用资源文件_第8张图片

资源文件使用

  1. 使用头文件中的私有ui(界面对象)
//进行操作界面对象
private:
    Ui::mMainWindow *ui;
  1. 使用setupUi()初始化Ui与mMainWindow 之间的接口,在QWidget类内,所以Ui类型的对象也能调用
ui->setupUi(this);
  1. 添加资源到工程中使用setIcon()设置图标函数,只要设置的对象时ui下的对象,都可以使用函数
//函数原型
void QWindow::setIcon(const QIcon &icon)		//设置图标函数

QIcon(const QString &fileName)		//图标类的构造函数 传入的是一个地址


//actionnew是ui创建的一个行为对象,QIcon参数形式:  
//							": + 前缀 + 文件路径 + 文件名"
ui->actionnew->setIcon(QIcon(":/Image/Luffy.png"));
ui->menu->setIcon(QIcon(":/Image/down.png"));

你可能感兴趣的:(c++,QT,qt,c++)