MainWindow界面代码解析

合集下载

pyqt5 mainwindow方法

pyqt5 mainwindow方法

在PyQt5中,`QMainWindow`类是主应用程序窗口的基类,它提供了一个应用程序的主要应用程序框架。

以下是使用`QMainWindow`的一些基本方法:1. 设置中央控件:使用`setCentralWidget()`方法可以设置主窗口的中央控件。

通常,这是放置主要界面元素的地方。

2. 调整窗口大小:`resize()`方法可以用来设置窗口的大小,使其适应其中的内容或根据需要进行调整。

3. 添加菜单栏:可以通过创建`QMenuBar`对象并将其添加到`QMainWindow`来设置菜单栏。

然后,可以创建`QMenu`对象并将其添加到菜单栏中,再向`QMenu`对象中添加`QAction`对象来实现具体的菜单项功能。

4. 状态栏和工具栏:可以通过`statusBar()`和`addToolBar()`方法来添加状态栏和工具栏。

5. 多文档支持:如果需要支持多文档界面(MDI),可以使用`QMdiArea`类来创建一个多文档区域,并将其设置为中央控件。

6. 文件操作:可以在菜单栏中添加打开文件的动作,通过`QFileDialog`来选择文件,然后读取文件内容进行处理。

7. 信号与槽:`QMainWindow`类支持信号与槽机制,可以用来处理用户交互,如点击按钮、选择菜单项等。

8. 布局管理:虽然`QMainWindow`通常用于设置中央控件,但也可以使用布局管理器(如`QHBoxLayout`、`QVBoxLayout`等)来管理其他控件的位置和大小。

9. 样式设置:可以通过设置`QMainWindow`的样式表(stylesheet)来自定义窗口的外观。

10. 事件处理:重写`QMainWindow`的事件处理函数(如`keyPressEvent`、`mousePressEvent`等)可以处理特定的用户输入事件。

Windows界面编程

Windows界面编程

GUI程序执行环境 7.3 GUI程序执行环境
在GUI(图形用户界面)中,用户与计算机 GUI(图形用户界面) 通过图形图像以及文本进行交互。 通过图形图像以及文本进行交互。在Windows 系统中,GUI程序显示出特定的窗口 图标、 程序显示出特定的窗口、 系统中,GUI程序显示出特定的窗口、图标、按 对话框等对象, 钮、对话框等对象,而用户通过鼠标或键盘控 操作这些对象。 制、操作这些对象。
模式 r w 打 开 方 式 a r+ w+ a+ 类 型 t b 说 明
以只读方式打开文件。 以只读方式打开文件。不能对该文件执行写操作 以只写方式打开文件。 以只写方式打开文件。文件中的原有内容被清除 以添加方式打开文件。文件中的原有内容被保留,在文件后面添加数据 以添加方式打开文件。文件中的原有内容被保留, 以读写方式打开文件。 以读写方式打开文件。文件必须存在 以读写方式打开文件。 以读写方式打开文件。文件中的原有内容被清除 同“a”,可以读文件 , 文件类型为二进制文件 文件类型为文本文件
利用线程能够并发运行的特点,可以将一 利用线程能够并发运行的特点, 个应用程序内的具体操作分成若干个线程。 个应用程序内的具体操作分成若干个线程。 因此,采用多线程能够提高CPU CPU的使用效率 因此,采用多线程能够提高CPU的使用效率 发挥多CPU 超线程、多核系统的优势。 CPU、 ,发挥多CPU、超线程、多核系统的优势。
7.3.1 窗口
1. 窗口的创建 2. 窗口的销毁 3. 创建、销毁窗口的汇编语言程序 创建、
7.3.2 菜单
1. 2. 3. 4. 在资源文件中描述菜单内容 创建窗口类指定菜单名 处理菜单消息 编译连接
7.3.3 对话框
1. 对话框的子窗口控件 2. 子窗口控件之间的控制 3. 消息处理

QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例

QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例

QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例为了实现添加按钮点击弹出信息提示框的功能,我们可以使用Qt来创建一个窗口控制程序。

首先,我们需要创建一个Qt窗口应用程序项目。

在Qt Creator中选择"新建项目",然后选择"C++"和"Qt Widgets应用",填写项目名称和路径,然后点击"下一步"。

在下一个界面,可以选择使用预设的窗口模板。

选择一个适合的窗口模板,例如"MainWindow",然后点击"下一步"。

接下来,在"项目管理器"中,展开源文件夹,找到"mainwindow.cpp"文件。

双击打开该文件。

在"mainwindow.cpp"文件中,我们需要添加按钮和相应的点击事件。

如果不存在"MainWindow"类的构造函数,则需要手动创建构造函数。

我们可以在构造函数中添加按钮。

```cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)ui->setupUi(this);//创建按钮QPushButton *btn = new QPushButton("添加按钮", this);btn->setGeometry(100, 100, 100, 30);//连接按钮的点击事件到槽函数connect(btn, SIGNAL(clicked(), this, SLOT(showMessageBox());MainWindow::~MainWindowdelete ui;//槽函数:点击按钮弹出信息提示框void MainWindow::showMessageBoxQMessageBox::information(this, "提示", "按钮已点击");```在上面的代码中,我们首先在构造函数中创建了一个按钮,并设置了按钮的位置和尺寸。

QtDesigner的使用

QtDesigner的使用

QtDesigner的使⽤1. Qt Designer 快速⼊门Qt Designer 是交互式可视化GUI设计⼯具,可以帮助我们快速开发 PyQt 程序的速度。

它⽣成的 UI 界⾯是⼀个后缀为 .ui 的⽂件,可以通过 pyiuc 转换为 .py ⽂件。

1.1 新建主窗⼝在模板选项中,最常⽤的是 Widget (通⽤窗⼝) 和 Main Window (主窗⼝)。

1.2 窗⼝主要区域介绍Widget Box 其中提供了很多控件,可以直接拖放到主窗⼝中。

在菜单栏选择 “Form” -> "Preview", 或者按“Ctrl + R”即可预览。

Object Inspactor ⾥边是对象列表,可以看出对象的层次关系。

Property Editor 可以编辑对象的属性Signal / slot Editor 编辑信号,管理图⽚1.3 将 ui ⽂件转为 py ⽂件利⽤加载好的 PyUIC ⼯具转变为 py转换成功的 myMainWindow.py 代码如下所⽰# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'myMainWindow.ui'## Created by: PyQt5 UI code generator 5.6## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_myMainWindow(object):def setupUi(self, myMainWindow):myMainWindow.setObjectName("myMainWindow")myMainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(myMainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(140, 270, 75, 23))self.pushButton.setObjectName("pushButton")myMainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(myMainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName("menubar")myMainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(myMainWindow)self.statusbar.setObjectName("statusbar")myMainWindow.setStatusBar(self.statusbar)self.retranslateUi(myMainWindow)QtCore.QMetaObject.connectSlotsByName(myMainWindow)def retranslateUi(self, myMainWindow):_translate = QtCore.QCoreApplication.translatemyMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow"))self.pushButton.setText(_translate("myMainWindow", "Confirm"))1.4 界⾯与逻辑分离通过转换 ui ⽂件为 py ⽂件,得到的只是界⾯的 ui 的类, 并不包括启动界⾯的函数,我们称之为界⾯⽂件。

QT学习笔记widgetMainWindow和Dialog的选择使用

QT学习笔记widgetMainWindow和Dialog的选择使用

Qt中的每‎个类,都有一个对‎应的同名头‎文件,其中包含其‎类定义。

例如要使用‎Q Appl‎i cati‎o n类,则需要在程‎序中添加" #inclu‎d e <QAppl‎i cati‎o n>"QAppl‎i cati‎o n类用于‎管理应用程‎序范围内的‎资源。

其构造函数‎需要mai‎n函数的a‎r gc和a‎r gv作为‎参数。

widge‎t被创建时‎都是不可见‎的(alway‎s creat‎e d hidde‎n)。

widge‎t中可容纳‎其它wid‎g et。

Qt中的w‎i dget‎在有用户行‎为或状态改‎变时会em‎i t signa‎l。

signa‎l可以和s‎l ot函数‎连接在一起‎(conne‎c t),这样当有s‎i gnal‎被emit‎时,对应的sl‎o t函数会‎被自动调用‎。

QWidg‎e t类的构‎造函数需要‎一个 QWidg‎e t * 指针作为参‎数,表示其pa‎r ent widge‎t(默认值为0‎,即不存在p‎a rent‎widge‎t)。

在pare‎n t widge‎t被删除时‎,Qt会自动‎删除其所有‎的chil‎d widge‎t。

Qt中有三‎种Layo‎u t Manag‎e r 类: QHBox‎L ayou‎t,QVBox‎L ayOu‎t,QGrid‎L ayOu‎t。

基本模式是‎将widg‎e t添加进‎L ayOu‎t,由Layo‎u t自动接‎管widg‎e t的尺寸‎和位置。

启动Qt程‎序时可以通‎过 -style‎参数改变程‎序的默认显‎式风格。

Chapt‎e r 2 Creat‎i ng Dialo‎g s2.1 Subcl‎a ssin‎g Dialo‎gQt中所有‎d ialo‎g的基类是‎Q Dial‎o g。

QDial‎o g派生自‎Q Widg‎e t。

Qt中所有‎定义了si‎g nal或‎s lot的‎类,在其类定义‎的开始处都‎要使用Q_‎O BJEC‎T宏。

第6章 QmainWindow主窗体

第6章 QmainWindow主窗体
showWidget =new ShowWidget(this); setCentralWidget(showWidget);
createActions(); createMenus(); createToolBars();
if(img.load("image.png")) {
showWidget->imageLabel->setPixmap(QPixmap::fromImage(img)); } }
最终实现的效果如图6.2所示。
下面是主窗口构造函数部分内容,构造函数主要实现窗体的初始化,打开 “imgprocessor.cpp”文件,添加如下代码:
ImgProcessor::ImgProcessor(QWidget *parent) : QMainWindow(parent)
{ setWindowTitle(tr("Image Processor"));
QPrinter printer; QPrintDialog printDialog(&printer,this); if(printDialog.exec()) {
QTextDocument *doc =showWidget->text->document(); doc->print(&printer); } }
打开“main.cpp”文件,添加如下加黑代码: #include <QtGui/QApplication> #include "imgprocessor.h" #include <QTextCodec> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //显示中文 ImgProcessor w; w.show(); return a.exec(); }

winmain参数

winmain参数

winmain参数WinMain是Windows操作系统中一个特殊的函数,被称为应用程序入口函数。

它是Windows程序的主函数,负责初始化程序,并接收和处理消息。

WinMain函数的原型如下:```c++int WINAPI WinMainHINSTANCE hInstance, // 当前实例句柄HINSTANCE hPrevInstance, // 前一个实例句柄(已弃用)LPSTR lpCmdLine, // 命令行参数int nCmdShow // 窗口的显示方式```WinMain函数是一个Windows API函数,它被称为"应用程序的入口点",是由操作系统在程序启动时自动调用的。

所有Windows程序都必须有这个函数。

下面将详细解释WinMain函数的每个参数以及它们的作用。

1. `HINSTANCE hInstance`:当前实例句柄,用于区分不同实例的唯一标识符。

在多实例应用程序中,可以使用这个句柄来区分不同的窗口和其他资源。

2. `HINSTANCE hPrevInstance`:前一个实例句柄,已弃用。

在早期版本的Windows中用于判断是否已经有实例在运行,现在多数情况下可以忽略。

4. `int nCmdShow`:窗口的显示方式,用于指定窗口最初的显示状态。

可以是下列常量之一:-`SW_HIDE`:隐藏窗口-`SW_MINIMIZE`:最小化窗口-`SW_MAXIMIZE`:最大化窗口-`SW_RESTORE`:恢复窗口-`SW_SHOW`:正常显示窗口WinMain函数的返回值是一个整型值,表示应用程序的退出状态。

通常情况下,返回0表示正常退出,非零值表示错误或异常退出。

在WinMain函数中,开发者可以执行以下任务:1. 初始化应用程序:在WinMain函数中,你可以进行应用程序的初始化操作,比如创建窗口、加载资源、初始化全局变量等。

可以使用hInstance来获取应用程序实例句柄,以便后续使用。

第一个qt窗口项目mainwindow

第一个qt窗口项目mainwindow
2. 接 下 来 要 实 现 动 态 显 示 时 间 , 这 里 就 需 要 有 一 个 定 时 器 , 定 时 器 的 初 始 化 同 样 在 mainwindow.cpp 的初始化代码中进行 首先还是要先包含#include <QTimer> 然后输入如下代码 这里还需要建立一个定时器的函数, 来响应定时器的变化,就是说时间到了之后,应该来 刷新显示时间, 這样才能实现动态显示时间。 先到 mainwindow.h 中添加私有信号槽 private slots: void timerUpDate(); 然后到 mainwindow.cpp 中完成 timerUpdate()函数, 代码如下。然后还要到 mainwindow 的 初始化函数中新建一个 Timer ,具体代码如下

ui->UNm_ledit->setFocus(); //鼠标回到用户名编辑框
1
}
2}
此时已经完成了登陆按钮的功能, 但是点击登陆之后, 怎么跳转到主窗口中去呢? 这里就需要在主窗口的文件中做如下处理,先回到 main.cpp 文件中。 首先在 main.cpp 中包含 dialog.h 头文件 #include “dialog.h” 然后如输入如下代码 ,代码中附有详细解释, 代码简单,所以不单独解释
#include <QMessageBox>
C++ Code
1 void Dialog::on_login_Btn_clicked()
2{
3
if(ui->UNm_ledit->text() == tr("qt") && ui->pwd_ledit->text() == tr("123"))
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MainWindow->addToolBar(mainToolBar);
centralWidget = new QWidget(MainWindow); centralWidget->setObjectName(QString::fromUtf8("centralWidget")); MainWindow->setCentralWidget(centralWidget); statusBar = new QStatusBar(MainWindow); statusBar->setObjectName(QString::fromUtf8("statusBar")); MainWindow->setStatusBar(statusBar); retranslateUi(MainWindow); QMetaObject::connectSlotsByName(MainWindow); 将 MainWindow 对象与 slot 联系起来 } // setupUi void retranslateUi(QMainWindow *MainWindow) { MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8)); } // retranslateUi }; namespace Ui { class MainWindow: public Ui_MainWindow {}; } // namespace Ui Qt creator 在创建时,根据用户输入的 class 名称定义一个 class:MainWindow,并将其放到 名称空间 Ui 中。目的是 Qt 强制要求其公有继承 Ui_MainWindow 的全部属性(方便用户直 接通过自定义的类 MainWindow 可以完全操作 UI 界面上的所有对象)。使得用户在头文件 mainwindow.h 自定义 calss:MainWindow 的时候不用关心是否有一个 Ui_MainWindow 类。 因为这个类是不会暴露给 mainwindow.h(用户头文件)文件的,这就是 C++的 PIMPL 条款, 防止 UI 布局改变,引起 Ui_MainWindow 改变,在引起 mainwindow.h 改变,从而使得所有 包含 mainwindow.h 的文件都需要重新编译,给编译带来了困难。 强制 MainWindow 公有继承 Ui_MainWindow,使得 Ui_MainWindow 中的所有对象(界 面布局中的对象)都成了 MainWindow 的成员。
他的参数为 MainWindow 对象
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(400, 300);
menuBar = new QMenuBar(MainWindow);
class Ui_MainWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;
void setupUi(QMainWindow *MainWindow) setupUi 功能是设置 UI 布局里的对象的属性。
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
QMainWindow(parent), ui(new Ui::MainWindow) 必须是 Ui::MainWindow 类,为了操作 setupUi 且和声明时统一。 { ui->setupUi(this); 设置类 MainWindow 的对象的属性,因为 MainWindow 公有继承了 Ui_MainWindow 的 所有属性,所以界面上的所有对象就是类 MainWindow 的对象成员。 } MainWindow::~MainWindow()
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE 类 Ui_MainWindow 主要作用:
1、UI 界面布局中的对象全部是这个类的成员; 2、UI 界面中对象的属性全部通过 setupUi 设置。
**
** Created: Tue Nov 30 22:52:00 2010
**
by: Qt User Interface Compiler version 4.7.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
class MainWindow; } 这个 Ui 名称空间必须定义,因为这个头文件里不能包含 ui_mainwindow.h 文件(PIMPL 条 款),如果没有定义 Ui 名称空间后面的 Ui::MainWindow 就会编译失败。有了这里的名称 空间 Ui 的定义使得与在 ui_mainwindow.h 中的名称空间 Ui 的定义统一起来了(都把类 MainWindow 定义到了名称空间 Ui 中)。 class MainWindow : public QMainWindow {
QT_END_NAMESPACE #endif // UI_MAINWINDOW_H
3 用户程序
用户程序是指 Qt 界面中面向用户的那部分程序,用户仅仅需要修改这些程 序就可以完成自己的功能。
3.1 mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui {
2.1 ui_mainwindow.h
/****************************************************************************** **
** Form generated from reading UI file 'mainwindow.ui'
{ delete ui;
}
3.3 main.cpp
#include <QtGui/QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) {
QApplication a(argc, argv); 应用程序管理对象 a
MainWindow w; w.show(); 显示界面
return a.exec(); 启动进程,把操作交给界面 }
4 用户使用 Qt 指南
用户只需要修改用户程序即可。
}; #endif // MAINWINDOW_H
3.2 mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" 根据 PIMPL 条款,"ui_mainwindow.h"文件最好暴露给实行文件(.cpp),为了不对编译有 影响。 MainWindow::MainWindow(QWidget *parent) :
Байду номын сангаас
*******************************************************************************
*/
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
Q_OBJECT 如果这个 class 里有 slot 就必须有 Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; 必须是 Ui::MainWindow 而不能是 MainWindow,因为只有 Ui::MainWindow 的对象才可 以操作 setupUi。
Qt 最初级的 MainWindow 程序分析 1 问题
使用 Qt creator2.1 创建一个 class 名称为:MainWindow 的主界面程序
2 界面程序
界面程序是指 Qt 的 UI 界面布局时自动生成的那部分代码,这部分代码 Qt 是不希望给用户看的,因为用户可以完全不关心这部分代码。这样减轻用户开发 难度。所有 Qt 为了隐藏这部分代码做了一点的工作,其中有技巧。我们就是来 分析其中的设计技巧。
menuBar->setObjectName(QString::fromUtf8("menuBar"));
MainWindow->setMenuBar(menuBar);
相关文档
最新文档