1.QT图形界面

QML 图形用户界面

QML 允许开发人员以声明的方式构建用户界面。用户界面特别受益于复合 QML 对象和使用属性绑定配置它们的简单性。

Qt Quick是一个模块,它提供用于创建用户界面的 QML 类型,例如具有自己的坐标系和渲染引擎的可视画布。动画和过渡效果是 Qt Quick 中的一流概念,视觉效果可以通过粒子和着色器效果的专用组件来补充。

基于QT Widget的用户界面

Qt Widget是传统的用户界面元素,通常出现在桌面环境中。这些小部件很好地集成到了在 Windows、Linux 和 macOS 上提供原生外观的底层平台。这些小部件成熟且具有丰富的用户界面元素,适用于大多数静态用户界面。Qt Quick相比,这些小部件不能很好地用于触摸屏和流畅、高度动画的现代用户界面。对于具有传统以桌面为中心的用户界面的应用程序,例如办公类型的应用程序,这些小部件是一个不错的选择。

 

本博客记录的主要以基于Qt Widget的传统用户界面为主(因为QML我也不会)。

主窗口类

这些类提供了典型的现代主应用程序窗口所需的一切,例如主窗口本身、菜单和工具栏、状态栏等。

 

 

Qt 提供了以下类来管理主窗口和相关的用户界面组件:

  • QMainWindow是可以围绕其构建应用程序的中心类。连同伴随的QDockWidgetQToolBar类,它代表了应用程序的顶级用户界面。
  • QDockWidget提供了一个小部件,可用于创建可拆卸的工具面板或帮助窗口。Dock 小部件跟踪它们自己的属性,它们可以作为外部窗口移动、关闭和浮动。
  • QToolBar提供了一个通用的工具栏小部件,它可以容纳许多不同的与动作相关的小部件,例如按钮、下拉菜单、组合框和旋转框。Qt 中对统一动作模型的强调意味着工具栏与菜单和键盘快捷键很好地配合。

示例代码

使用QMainWindow很简单。通常,我们继承 QMainWindow并在QMainWindow构造函数中设置菜单、工具栏和停靠窗口小部件。

要将菜单栏添加到主窗口,我们只需创建菜单,并将它们添加到主窗口的菜单栏。注意QMainWindow::menuBar ()函数在第一次调用时会自动创建菜单栏。您也可以调用QMainWindow::setMenuBar () 在主窗口中使用自定义菜单栏。

 

 1 #pragma once
 2 
 3 #include <QtWidgets/QMainWindow>
 4 #include <QFile>
 5 #include <QDockWidget>
 6 #include <QListWidget>
 7 #include <QLabel>
 8 #include <QtWidgets/QTablewidget>
 9 #include "ui_MainWindows.h"
10 
11 class MainWindows : public QMainWindow
12 {
13     Q_OBJECT
14 
15 public:
16     MainWindows(QWidget *parent = Q_NULLPTR);
17 public slots:
18 bool newFile();
19 bool openFile();
20 private:
21     Ui::MainWindowsClass ui;
22     QAction *m_newAct;
23     QAction *m_openAct;
24     QToolBar *m_fileToolBar;
25     QDockWidget *m_LeftContentsWidget;
26     QDockWidget *m_RightContentsWidget;
27     QDockWidget *m_TopContentsWidget;
28     QDockWidget *m_BottomContentsWidget;
29 };
 1 #include "MainWindows.h"
 2 
 3 MainWindows::MainWindows(QWidget *parent)
 4     : QMainWindow(parent)
 5 {
 6     ui.setupUi(this);
 7     // 创建两个文件动作
 8     m_newAct = new QAction(tr("&New"), this);//创建一个“新建文件”的行为
 9     m_newAct->setShortcut(QKeySequence::New);//为该行为设置快捷键Ctrl+n
10     m_newAct->setStatusTip(tr("create a new file"));//为该行为设置一个状态提示
11     connect(m_newAct, &QAction::triggered,this,&MainWindows::newFile);//信号槽,处理该行为
12 
13     m_openAct = new QAction(tr("&Open"), this);
14     m_openAct->setShortcut(QKeySequence::Open);
15     m_openAct->setStatusTip(tr("open a file"));
16     connect(m_openAct, &QAction::triggered, this, &MainWindows::openFile);
17 
18     // 创建一个文件菜单栏
19     m_fileToolBar = addToolBar(tr("File"));
20     m_fileToolBar->addAction(m_newAct);
21     m_fileToolBar->addAction(m_openAct);
22     m_fileToolBar->setAllowedAreas(Qt::TopToolBarArea|Qt::BottomToolBarArea);//限定该菜单栏的位置
23     addToolBar(Qt::TopToolBarArea, m_fileToolBar);
24 
25     // 定义左右边栏占据四个角
26     setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
27     setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
28     setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
29     setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
30 
31     // 创建一个侧边栏
32     m_LeftContentsWidget = new QDockWidget(tr(u8"左侧边栏"), this);
33     m_LeftContentsWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
34     addDockWidget(Qt::LeftDockWidgetArea, m_LeftContentsWidget);
35 
36     QListWidget *leftHeadingList = new QListWidget(m_LeftContentsWidget);
37     m_LeftContentsWidget->setWidget(leftHeadingList);
38 
39     // 创建一个侧边栏
40     m_RightContentsWidget = new QDockWidget(tr(u8"右侧边栏"), this);
41     m_RightContentsWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
42     addDockWidget(Qt::RightDockWidgetArea, m_RightContentsWidget);
43 
44     QListWidget *rightHeadingList = new QListWidget(m_RightContentsWidget);
45     m_RightContentsWidget->setWidget(rightHeadingList);
46 
47     // 创建一个侧边栏
48     m_TopContentsWidget = new QDockWidget(tr(u8"上侧边栏"), this);
49     m_TopContentsWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
50     addDockWidget(Qt::TopDockWidgetArea, m_TopContentsWidget);
51 
52     QListWidget *topHeadingList = new QListWidget(m_TopContentsWidget);
53     m_TopContentsWidget->setWidget(topHeadingList);
54 
55     // 创建一个侧边栏
56     m_BottomContentsWidget = new QDockWidget(tr(u8"下侧边栏"), this);
57     m_BottomContentsWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
58     addDockWidget(Qt::BottomDockWidgetArea, m_BottomContentsWidget);
59 
60     QListWidget *bottomHeadingList = new QListWidget(m_BottomContentsWidget);
61     m_BottomContentsWidget->setWidget(bottomHeadingList);
62 
63     // 中央widget
64     QTableWidget *centralWidget = new QTableWidget(this);
65     centralWidget->setStyleSheet("QTableView{background-color:#696969}");
66     centralWidget->setWindowTitle(tr(u8"中央部件"));
67     setCentralWidget(centralWidget);
68 
69 
70 }
71 
72 bool MainWindows::newFile()
73 {
74     QFile *file = new QFile("./newFile.txt");
75     file->close();
76     return true;
77 }
78 
79 bool MainWindows::openFile()
80 {
81     QFile file("./newFile.txt");
82     if (file.isOpen()) {
83         return true;
84     }
85 }

 

posted @ 2022-02-17 16:36  ygtrece  阅读(447)  评论(0)    收藏  举报