Qt_Dev_Summarize

Qt_Dev_Summarize

第0章 前言

系统结构及开发体系

嵌入式系统结构:
应用软件
嵌入式操作系统
以微处理器 / 控制器为核心的硬件平台
嵌入式开发体系
应用开发C / C++ Qt JAVA SHELL GNU LIB
操作系统LINUX Android FreeRTOS QNX vxWorks
固件及驱动UBOOT VIVI 驱动开发
处理器ARM
外围设备I2C USB SPI 传感器 LCD 触摸屏 KEY
电子电路PCB IC FPGA

GUI介绍

定义:图形用户界面,是计算机与其使用者之间的对话接口,是计算机系统的重要组成部分。
组成部分:桌面、视窗、菜单、按钮、图标

重要性:

  1. 使操作更加简单、更加快捷、更加人性化
  2. 对于应用程序的成功至关重要

常用GUI开发工具

  • MFC(C++)
  • WinForm(C)
  • Qt(C++)
  • GTK(C)
  • Android SDK(Java)
  • Object-C
  • miniGUI(C)

Qt介绍

  • Trolltech(奇趣)公司,多平台,C++图形用户界面应用程序框架
  • 优秀特点
    • 跨平台(Windows,Android,IOS,Linux)
    • 一处编写,处处编译

第1章 基本创建

Qt 下载与安装

qt-opensource-windows-x86-mingw530-5.8.0.exe为例

  • opensource=开源
  • windows-x86=Windows平台
  • mingw530=MinGW530编译器
  • 5.8.0=版本号

新程序

  • 文件 > 新建文件或项目
  • Application > Qt Widgets Application
文件说明

.pro=项目文件
.pro.user=与用户相关项目信息
.ui=设计师设计的界面文件

发布

.pro加入RC_ICONS = myico.ico

代码构造

.pro文件

QT       += core gui
//core(核心) gui(窗口系统集成)
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
//如果Qt版本大于4,需要添加widgets模块
TARGET = mydialog2
//生成的文件名
TEMPLATE = app
//表示是个应用程序
SOURCES += main.cpp\
        mywidget.cpp
HEADERS  += mywidget.h
FORMS    += mywidget.ui
//源文件,头文件和界面文件
RC_ICONS = myico.ico
//添加应用程序图标

.cpp文件

#include <QApplication>
#include <QDialog>
#include <QLabel>
//#include "ui_hellodialog.h"
int main(int argc,char *argv[])
//argc=argument count
//argv=argument vector
{
    QApplication a(argc,argv);
    QDialog w;
    w.resize(400,300);
    //宽和高,单位像素
    QLabel label(&w);
    label.setText(QObject::tr("Hello World!"));
    //QObject::tr=多语言支持
    w.show();
    //默认情况下,新建的可视对象都是不可见的
    return a.exe();
    //进入事件循环
}
//UTF-8保存

.ui文件

  • xml文件
  • 生成ui_hellodialog.h

第2章 窗口部件

QWidget类关系树

[外链图片转存中…(img-msQhrO79-1592474435664)]
[外链图片转存中…(img-swtYLbGn-1592474435669)]

QWidget是所有用户界面的基类,被称为基本窗口部件

Qt Creator提供的默认三个窗口基类:
QMainWindow:带有菜单栏和工具栏的主窗口类;
QDialog:是重要的信息显示和获取输入数据的用户界面对象,是各种对话框的基类;
QWidget: QWidget类是所有用户界面对象的基类,被称为基础窗口部件,继承自QObject类和QPaintDevice类。所有的窗口部件都继承自QWidget。

QWidget

  • 窗口部件(Widget):简称部件,是Qt中建立用户界面的主要元素。像主窗口、对话框、标签、还有以后要介绍到的按钮、文本输入框等都是窗口部件。
  • 窗口:把没有嵌入到其他部件中的部件称为窗口,一般的,窗口都有边框和标题栏,就像程序中的widget和label一样。
  • 窗口就是没有父部件的部件,所以又称为顶级部件(top-level widget)。
  • 子部件(child widget):非窗口部件。在Qt中大部分部件被用作子部件,嵌入在别的窗口中。
//QLabel类型

QLabel *label=new QLabel();
//无父窗口
QLabel *label2=new QLabel(widget);
//widget为父窗口指针
//父对象销毁时也会销毁子对象

//函数原型:
QWidget *widget = new Qwidget(QWidget *parent;Qt::WindowFlags f);
//parent=父窗口指针
//f=Qt::WidgetType枚举类型的值或者组合
几何布局
  • setWindowState()
    设置窗口状态
    参数类型:Qt::WindowStates,
    枚举值(Qt::WindowMaximized最大化 Qt::WindowMinimized最小化 Qt::WindowFullScreen全屏 Qt::WindowActive活动窗口 Qt::WindowNoState默认)
  • x(),y(),frameGeometry(),pos(),move()
    包含框架的位置函数,
    距离左边缘的x ,距离上边缘的y,两者结合pos
  • geometry(),width(),height(),rect(),size()
    不包含框架的函数
    内左上角坐标geometry(),内宽度width(), 内高度height()
  • resize()
    调整窗口大小,单位像素

[外链图片转存中…(img-8TZ8mu7s-1592474435672)]

qDebug()
  1. 添加#include <QDebug>
  2. qDebug()当作cout
  3. 在应用程序输出窗口可以看到信息

QDialog

模态和非模态

模态对话框就是在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互。
非模态对话框是既可以与它交互,也可以与同一程序中的其他窗口交互。

dialog指明了父窗口就不用delete来释放对象了

QDialog *dialog = new QDialog(this);
dialog->show();//非模态对话框
//或者
QDialog dialog(this);
dialog.exec();//模态对话框
//函数返回一个DialogCode结果。
//enum DialogCode { Rejected, Accepted }

QDialog *dialog = new QDialog(this);
dialog->setModal(true);//修改模态
dialog->show();

信号与槽

必须添加Q_OBJECT宏
在类定义第一行添加
Q_OBJECT

.h类声明中添加信号

signals:
  void dlgReturn(int);

.h类声明中添加槽函数

public slots:
  void showChildDialog();

普通函数中发射信号

void MyDialog::on_pushButton_clicked()
{
  int value=ui->spainBox->value();//获取输入的值
  emit dlgReturn(value);//发射信号
  close();//关闭Dialog
}

.cpp文件实现槽函数

void MyWidget::showChildDialog()
{
  QDialog *dialog =new QDialog(this);
  dialog->show();
}
  • 一个信号可以关联到多个槽上面
  • 多个信号可以关联到一个槽上面
  • 一个信号可以关联到另一个信号
  • 一个信号关联到多个槽上面时无法指定执行顺序

信号与槽的关联

connect()关联

函数原型

bool QObject::connect(const QObject *sender,const char*signal,const QObject *receiver,const char*method,Qt::ConnectionType type=Qt::AutoConnection)

sender : 发送信号的对象
signal : 发送的信号(使用SIGNAL()包裹或者使用&Singal::前缀)
receiver : 接收信号的对象
method : 要执行的槽函数(使用SLOT()包裹或者使用&Reveiver::前缀,槽函数中无参数)
Qt::ConnectionType : 关联方式
[外链图片转存中…(img-ck1CKmEn-1592474435676)]
关联成功返回 true

注意:信号参数可以多于槽函数参数,但多余参数会被忽略。

设计模式关联
  • 首先添加自定义对话框类MyDialog。在设计模式中向窗口上添加两个Push Button,并且分别更改其显示文本为“进入主界面”和“退出程序”
  • 点击设计器上方的“编辑信号/槽”图标,或者按下快捷键F4,这时便进入了部件的信号和槽的编辑模式。在“退出程序”按钮上按住鼠标左键,然后拖动到窗口界面上,这时松开鼠标左键。
  • 在弹出的配置连接对话框中,选中下面的“显示从QWidget继承的信号和槽”选项,然后在左边的QPushButton栏中选择信号clicked(),在右边的QDialog栏中选择对应的槽close(),完成后按下“确定”。
自动关联

在“进入主界面”按钮上右击,在弹出的菜单上选择“转到槽”,然后在弹出的对话框中选择clicked()信号,并按“确定”
。这时便会进入代码编辑模式,并且定位到自动生成的on_pushButton_clicked()槽中。
在其中添加代码:

void MyDialog::on_pushButton_clicked()
{
  accept();
}

自动关联就是将关联函数整合到槽命名中。
由字符“on”和发射信号的部件对象名,还有信号名组成。
每当pushButton被按下,就会发射clicked()信号,然后就会执行on_pushButton_clicked()槽。

标准对话框

颜色对话框

头文件:<QColorDialog>
参数:
QColorDialog color=QColorDialog::getColor(Qt::red,this,tr("标题"),QColorDialog::ShowAlphaChannel)

  • getColor()获取颜色
  • Qt::red=设置初始颜色
  • this=指定父窗口
  • tr("")=设置窗口标题
  • QColorDialog::ShowAlphaChannel=透明度设置许可
文件对话框

头文件:<QFileDialog>
参数:
QString filename=QFileDialog::getOpenFileName(this,tr("标题"),"D:",tr("图片文件(*png *jpg);;文本文件(*txt)")
QStringList filenames=QFileDialog::getOpenFileNames(this,tr("标题"),"D:",tr("图片文件(*png *jpg);;文本文件(*txt)")

  • filename=文件字符串
  • getOpenFileName()=返回一个文件名字符串
  • filenames=文件字符串列表
  • getOpenFileNames()=返回一个文件名字符串列表
  • this=指定父窗口
  • tr(“标题”)=指定标题
  • “D:”=默认路径
  • tr(“图片文件(*png *jpg);;文本文件(*txt)”=文件筛选器,不同文件类型用;;分隔
字体对话框

头文件:<QFontDialog>
参数:
bool ok;
QFont font=QFontDialog::getFont(&ok,this)

  • &ok=存放bool型变量(用来保存按钮被按下的状态)
  • this=父窗口
  • font=保存字体信息(setFont()参数)
输入对话框

头文件:<QInputDialog>
参数:

bool ok;
//获取字符串
QString string = QInputDialog::getText(this, tr("窗口标题"),tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
  • this=父窗口
  • tr(“窗口标题”)=设置窗口标题
  • tr(“请输入用户名:”)=输入框标签
  • QLineEdit::Normal=显示模式
  • tr(“admin”)=默认值
// 获取整数
int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
  • 100=默认值
  • -1000=最小值
  • 1000=最大值
  • 10=使用箭头调整时跃迁值
// 获取浮点数
double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
  • 2=小数点位数
QStringList items;
items << tr("条目1") << tr("条目2");
// 获取条目
QString item = QInputDialog::getItem(this, tr("输入条目对话框"),tr("请选择或输入一个条目"), items, 0, true, &ok);
  • 0=默认显示第一条目
  • true=条目可以被更改
消息对话框

头文件<QMessageBox>
参数:
int ret=QMessageBox::[question|information|warning|Abort|critical|YesAll](this, tr"标题", tr"显示内容", QMessageBox::[NO|Ok|Abort|YesAll])

  • question|information|warning|Abort|critical|YesAll:问题/提示/警告/错误/严重错误对话框
  • abort没有返回值
  • QMessageBox::[NO|Ok|Abort|YesAll]=标准按钮
进度对话框

头文件:<QProgressDialog>
参数:
QProgressDialog dialog(tr"标题",tr"取消",0,50000,this
tr"标题":对话框标签内容
tr"取消":取消按钮的显示文本
0,50000:最小值和最大值
this:父窗口
setValue()通过赋值推动进度条
QCoreApplication::processEvents()不断调用以避免界面冻结
QProgressDialog::wasCancel()判断是否按下取消按钮,是则返回1

错误信息对话框

.h文件,类前置声明class QErrorMessage
添加私有对象QErrorMessage *errordlg

.cpp文件
添加头文件#include <QErrorMessage>
构造函数中添加errordlg=new QErrorMessage(this)

设计槽函数

void MyWidget::on_pushButton_clicked()
{
  errordlg->setWindowTitle(tr("错误信息对话框"));
  errordlg->showMessage(tr("这里是出错信息"));
}
向导对话框

其他窗口部件

Frame类族
QLabel

用来显示文本或者图片
构造函数添加,字体设置代码

QFont font;
font.setFamily("华文行楷");
font.setPointSize(20);
font.setBold(true);
font.setItalic(true);
ui->label->setFont(font);

构造函数添加,添加图片

ui->label->setPixmap(QPixmap("图片地址"));

构造函数添加,添加动画

QMovie *movie =new QMovie("gif地址");
ui->label->setMovie(movie);//添加动画
movie-start//设置动画
QLCDNNumber
QStandWidget
QToolBox
按钮部件
QPushButton

成员:
setText(tr"")=设置显示按钮
setIcon(QIcon("地址"))=设置图标
setMenu(QMenu *menu)=设置菜单(须头文件<QMenu>

QCheckButton
QRadioButton
QGroupButton
QLineEdit

单行文本编辑器

显示模式

echoMode:[Normal|NoEcho|Password|PasswordEchoOnEdit]=正常显示|不显示|密码样式|输入时正常显示

输入掩码
输入验证
自动补全
QAbstractSpainBox
QDataTimeEdit
QSpinBox和QDoubleSpinBox
QAbstractSlider

第3章 布局管理

布局管理系统

布局管理器
基本布局管理器

头文件:<QHBoxLayout>(水平)和<QVBoxLayout>(垂直)
函数:
addWidget(Widget及其子控件指针)=向布局管理器中添加部件
setSpacing(int)=部件间距,单位像素
setContentsMargins(int,int,int,int)=布局管理器到四周的距离,单位像素,顺序左上右下

栅格布局管理器

毕业设计都写完了,不写了ヽ〔゚Д゚〕丿

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在数据分析和数据处理中,`group_by` 和 `summarize` 是两种常用的功能,它们通常在统计分析或数据清洗时一起使用。`group_by` 函数通常在 SQL、Pandas(Python 中的数据分析库)或类似的工具中被用来按照一个或多个列对数据集进行分组,而 `summarize` 或者类似函数则会对每个组内的数据执行聚合操作,如求和、计数、平均值等,从而提取关键信息并去除重复值。 具体步骤如下: 1. **group_by**: - 这个操作会将数据集按指定的列(或列组合)划分成多个小组(也称为分组或分区)。 - 例如,在 SQL 中,你可以使用 `GROUP BY column_name` 来对 `column_name` 列的值进行分组。 2. **summarize** 或 **聚合**: - 这个操作会对每个组内的数据计算出总结信息,如 `COUNT(*)` 计算行数,`AVG(column)` 计算 `column` 列的平均值,`SUM(column)` 求和等。 - 如果想要去除重复值,一般在分组之后就不太需要再手动去重,因为每个组内默认不会有重复的记录。 3. **去重**: - 通常情况下,`group_by` 自然地实现了去重,因为你只对每个唯一的组(由分组键决定)进行操作,所以不会包含重复的组。但如果你确实想要在汇总之前去除重复的行,可以在分组前使用 `DISTINCT` 关键字。 相关问题: 1. 在哪些编程语言或库中能使用 `group_by` 和 `summarize`? 2. `group_by` 和 `pivot` 功能有什么区别? 3. 如何在 Pandas 中实现 `group_by` 后的聚合和去重操作?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值