qprocess回调_Qt笔记总结

本文是Qt编程的笔记总结,涵盖了常用控件、信号与槽机制的使用,包括自定义信号槽、Lambda表达式的应用。详细讲解了Qt窗口系统,如QWidget、QMainWindow、QDialog的使用,以及QStatusBar、QMessageBox等对话框的创建。此外,还介绍了文件对话框QFileDialog和Socket通信的基础知识,涉及TCP服务器和客户端的实现。最后提到了多线程的使用和Qt数据库操作的简单示例。
摘要由CSDN通过智能技术生成

Qt笔记总结

作者:hackett

微信公众号:加班猿

一、常用控件

按钮类

QPushButton

QtoolButton

QRadioButton

item

QListWidget

容器类

QStackWidget

QWidget

QFrame

编辑类

QComboBox

QLineEdit

QTextEdit

显示类

QLabel

setOpenExternalLinks()设置为true自动打开,false要打开链接需要捕捉linkActivated()信号//显示普通文本字符串

QLable *label = new QLable;

label->setText(“Hello, World!”);

//显示HTML格式的字符串

QLabel * label = new QLabel(this);

label ->setText("Hello, World");

label ->setText("

百度一下

");

label ->setOpenExternalLinks(true);

QLabel * label = new QLabel(this);

label ->setText("Hello, World");

label ->setText("

百度一下

");

// label->setOpenExternalLinks(true);

connect(label, &QLabel::linkActivated,

this, &MyWidget::slotOpenUrl);

//槽函数

void MyWidget::slotOpenUrl(const QString &link)

{

QDesktopServices::openUrl(QUrl(link));

}

QProcessBar

QMessageBox

二、信号与槽

信号和槽

信号槽,实际就是观察者模式。当某个事件发生之后,它就会发出一个信号(signal)将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。当信号发出时,被连接的槽函数会自动被回调。1、connect(sender, signal, receiver, slot);sender:发送信号的对象

signal:发送对象发出的信号

receiver:接收信号的对象

slot:接收对象在接收到信号之后所需要调用的函数

例如:/* &b1: 信号发出者,指针类型

* &QPushButton::pressed:处理的信号 (&发送者的类名::信号名字)

* this: 信号接收者

* &MainWidget::close:槽函数,信号处理函数 (&接收的类名::槽函数名字)

*/

connect(&b1, &QPushButton::pressed, this, &MainWidget::close);

自定义信号槽

自定义信号槽需要注意的事项发送者和接收者都需要是QObject的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外);

使用 signals 标记信号函数,信号是一个函数声明,返回 void,不需要实现函数代码;

槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;

使用 emit 在恰当的位置发送信号;

使用QObject::connect()函数连接信号和槽。

任何成员函数、static 函数、全局函数和 Lambda 表达式都可以作为槽函数/* 自定义槽,普通函数的用法

* Qt5:任意的成员函数,普通全局函数,静态函数

* 槽函数需要和信号一致(参数,返回值)

* 由于信号都是没有返回值,所以,槽函数一定没有返回值

*/

connect(b2, &QPushButton::released, this, &MainWidget::mySlot);

Lambda表达式

C++11中的Lambda表达式用于定义并创建匿名的函数对象。

基本构成:[函数对象参数](操作符重载函数参数)mutable或exception ->返回值{函数体}

1、 函数对象参数:[ ] 标识一个**Lambda的开始**,这部分必须存在,**不能省略**。

* 空,没有任何函数对象参数

* =,**值传递方式**(作用范围:所有可见的局部变量以及所在类的this)

* &,**引用传递方式**(作用范围:所有可见的局部变量以及所在类的this)

* this,函数体内可以可以使用**Lambda所在类**中的成员变量

* a,把a按值进行传递(默认为const不可修改,可添加mutable修饰符修改)

* &b,把b按引用进行传递

* &,a,b,除a和b进行值传递,其他参数按引用进行传递

2、 操作符重载函数参数:

标识重载的()操作符的参数,没有参数时,这部分可以省略。

3、 可修改标示符:

mutable声明,这部分可以省略。按值传递函数对象参数时,加上mutable修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)。

4、错误抛出标示符:

exception声明,这部分也可以省略。exception声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用throw(int)

5、函数返回值:

->返回值类型,标识函数返回值的类型,当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。

6、函数体:

{},标识函数的实现,这部分不能省略,但函数体可以为空。

三、Qt窗口系统

1、坐标体系

以左上角为原点,X向右增加,Y向下增加。

2、QWidget

所有窗口及窗口控件都是从QWidget直接或间接派生出来的。对象模型Qt创建对象的时候会提供一个Parent对象指针

在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)

QWidget是能够在屏幕上显示的一切组件的父类

QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件,也可以自己删除子对象,它们会自动从其父对象列表中删除。

当一个QObject对象在堆上创建的时候,Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的

任何对象树中的 QObject对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的children()列表中删除;如果有孩子,则自动 delete 每一个孩子。Qt 保证没有QObject会被 delete 两次,这是由析构顺序决定的。

3、QMainWindow

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget)

菜单栏创建菜单栏,通过QMainWindow类的menubar() 函数获取主窗口菜单栏指针QMenuBar * menuBar() const

创建菜单,调用QMenu的成员函数addMenu() 来添加菜单QAction* addMenu(QMenu * menu)

QMenu* addMenu(const QString & title)

QMenu* addMenu(const QIcon & icon, const QString & title)

创建菜单项,调用QMenu的成员函数addAction() 来添加菜单项QAction* activeAction() const

QAction* addAction(const QString & text)

QAction* addAction(const QIcon & icon, const QString & text)

QAction* addAction(const QString & text, const QObject * receiver,

const char * member, const QKeySequence & shortcut = 0)

QAction* addAction(const QIcon & icon, const QString & text,

const QObject * receiver, const char * member,

const QKeySequence & shortcut = 0)

工具栏直接调用QMainWindow类的addToolBar() 函数获取主窗口的工具条对象,每增加一个工具条都需要调用一次该函数。

插入属于工具条的动作,即在工具条上添加操作。通过QToolBar类的addAction() 函数添加。

工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括:/*

Qt::LeftToolBarArea //停靠在左侧

Qt::RightToolBarArea //停靠在右侧

Qt::TopToolBarArea //停靠在顶部

Qt::BottomToolBarArea   //停靠在底部

Qt::AllToolBarAreas //以上四个位置都可停靠

*/

/*使用setAllowedAreas()函数指定停靠区域*/

setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

/*使用setMoveable()函数设定工具栏的可移动性*/

setMoveable(false);//工具条不可移动, 只能停靠在初始化的位置上

​```

状态栏派生自QWidget类,使用方法与QWidget类似,QStatusBar类常用成员函数://添加小部件

void addWidget(QWidget * widget, int stretch = 0)

//插入小部件

int insertWidget(int index, QWidget * widget, int stretch = 0)

//删除小部件

void removeWidget(QWidget * widget)

4、对话框QDialog

Qt 中使用QDialog类实现对话框。

对话框分为模态对话框和非模态对话框。模态对话框,就是会阻塞同一应用程序中其它窗口的输入。

模态对话框很常见,比如“打开文件”功能。你可以尝试一下记事本的打开文件,当打开文件对话框出现时,我们是不能对除此对话框之外的窗口部分进行操作的。

与此相反的是非模态对话框,例如查找对话框,我们可以在显示着查找对话框的同时,继续对记事本的内容进行编辑。标准对话框

Qt 的内置对话框大致分为以下几类:QColorDialog: 选择颜色;

QFileDialog: 选择文件或者目录;

QFontDialog: 选择字体;

QInputDialog: 允许用户输入一个值,并将其值返回;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值