Qt开发初步,循序渐进,preRequest for 蓝图逆袭

简介: 1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize; QWidget::setGeometry()窗口大小在屏幕上的显示位置 QWidget::setGeometry()函数设置窗口首次显示...

1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize;

QWidget::setGeometry()窗口大小在屏幕上的显示位置

QWidget::setGeometry()函数设置窗口首次显示在屏幕上时的大小和位置,窗口显示后可被移动或是改变大小;

QWidget::setGeometry()4个函数参数解读

前2个参数决定窗口在整个显示屏上的位置,后两个参数 决定窗口的大小(长宽)

setMinimumSize(),setMaximumSize();

2,主窗口部件添加对象(button,scroll bar,label)

向窗口添加与用户交互对象,发挥窗口用处,因为窗口是干不了啥事的!!!

向新创建的窗口上添加对象,添加对象时this -pointer很重要

测试向主部件窗口添加按钮

部分Codes

 3,格式按钮上的文本,QPushButton::setFont();

4个参数说明,字体Courier,Times,气体大小--像素,文本加粗QFont::Light,Weig,ht文本是否为粗体(True/False)

b1->setFont(QFont("Courier",12,QFont::Light,TRUE));

5,主窗口部件添加标签

无论你所添加的部件是什么,想窗口中添加子部件的过程基本一致,eg:向窗口中添加文本标签,使用QLabel class

具有一个按钮和标签的MyMainWindow Objects;

 6,主不见你中添加按钮点击事件-退出按钮,Qt类库与用户的交互方式,响应用户操作,其他GUI库使用回调函数方式,Qt使用信号和槽

信号和槽是相互关联的函数.信号Signal-->实际是一个函数,执行时与该信号相连接的槽Slot-->实际也是个函数也执行

测试建立退出按钮

 

b1按钮的clicked()信号与qApp的quit()槽相连接,当点击按钮时,将产生QPushButton::clicked()信号,导致qApp的quit()槽被执行,从而使程序退出.qApp是Qt的一个内置指针,总是指向程序中QApplication对象,工作方式与this指针相同,指向一个还没有创建的对象

设置label的alignment 报错信息

click.cpp: In constructor ‘MyMainWindow::MyMainWindow()’:
click.cpp:27:22: error: ‘Alignment’ was not declared in this scope
  label->setAlignment(Alignment);
                      ^
click.cpp:27:22: note: suggested alternative:
In file included from /opt/Qt5.4.1/5.4/gcc_64/include/QtCore/qglobal.h:1085:0,
                 from /opt/Qt5.4.1/5.4/gcc_64/include/QtCore/qcoreapplication.h:37,
                 from /opt/Qt5.4.1/5.4/gcc_64/include/QtWidgets/qapplication.h:37,
                 from /opt/Qt5.4.1/5.4/gcc_64/include/QtWidgets/QApplication:1,
                 from click.cpp:1:
/opt/Qt5.4.1/5.4/gcc_64/include/QtCore/qnamespace.h:250:21: note:   ‘Qt::Alignment’
     Q_DECLARE_FLAGS(Alignment, AlignmentFlag)
                     ^
/opt/Qt5.4.1/5.4/gcc_64/include/QtCore/qflags.h:155:22: note: in definition of macro ‘Q_DECLARE_FLAGS’
 typedef QFlags<Enum> Flags;
                      ^
click.cpp: In function ‘int main(int, char**)’:
click.cpp:37:22: error: ‘argv’ was not declared in this scope
  QApplication a(argc,argv);
                      ^
click.cpp:40:4: error: ‘class QApplication’ has no member named ‘show’
  a.show();
    ^
click.cpp: At global scope:
click.cpp:35:5: warning: unused parameter ‘agrv’ [-Wunused-parameter]
 int main(int argc,char **agrv)
     ^
make: *** [click.o] Error 1
View Code

总结---Qt用户交互---信号和槽

7,调整主窗口,其他对象位置错乱 ----> 布局管理器layout manager;

实战Qt槽信号--用户交互

Qt部件与用户的交互方式不同于其他GUI工具包,用户交互是所有GUI应用程序关心 的问题,通过将某种用户事件(鼠标点击)程序事件(例如程序退出)联系起来,使用户能够在图形界面中只使用鼠标来控制程序.

其他GUI工具包使用回调函数创建用户交互,Qt中使用信号和槽只需一行代码就能将用户事件和程序事件连接起来;

使用Qt自带的信号和槽及创建自己的信号和槽--->使用元对象编译器(Meta Object Complier,MOC)实用程序

8,解读信号和槽

信号signal和槽slot,传统技术回调call back

槽信号--用户交互方法术语:

用户事件-->

程序事件-->程序所产生的事件,eg:用户点击鼠标后程序退出;

发射信号-->点击鼠标,发射clicked()signal.为了发射信号使用emit key words;

内部状态-->

MOC-->元对象编译器用于构造用户自己的信号槽,处理Qt特有的关键字emit,创建合法的C++代码

槽:实际槽是标准的成员函数,只是这个成员函数增加了一些特殊功能,能够连接到信号.每当槽所连接的信号被发射时,槽(类成员函数)被执行,创建自己的槽slot实际上是在编写一个普通的类成员函数.

 Qt class 预定义槽--QPushButton 所包含的clicked()函数;

总结:槽--实际是类标准成员函数.

信号--也是成员函数,当对象内部发生某些事件(其内部状态发生变化)、它能够发出信号,如果这个信号连接到槽,那么这个槽函数即将被执行,可以将多个槽连接到同一个信号

总结:信号-被定义为当某个事件发生时将被发射,之后执行所有被连接的槽.

9,使用Qt预定义的信号和槽,实现退出按钮功能,将按钮QPushButton的clicked()信号signal连接到qApp的quit()槽.使得每当发射clicked()信号时,程序便执行quit()槽(函数).

9.1 Signal,slot--Example:

QSlider滑动,QLCDNumber

槽信号头文件

 

问题排错,

演示具有滑块和LCD显示的信号和槽应用案例

slider的valueChanged()信号被连接到lcd的display()槽/

11,QPushButton.QLineEdit

QPushButton的clicked()信号,连接到QLineEdit类所包含的3个不同槽,达到点击按钮就能控制QLineEdit对象中文本--Qt reference Document.

12,创建用户自己定义的信号和槽,使用元对象编译器

moc(meta object Compiler)

moc infile.h -o outfile.moc 命令读取infile.h文件,该文件中声明Qt类,以及信号和槽,然后根据它创建有效的C++代码,将生产的代码写入到outfile.moc;

将生成的moc文件包含到cpp源码   或是下面的另外一种使用moc文件

g++ -c outfile.moc -o outfile.o

g++ -c infile.cpp -o infile.o

g++ -lqt outfile.o infile.o -o MyProgram;

信号和槽--都是类内成员函数,声明用户槽,使用特殊的关键字使Moc能够将槽和其它成员函数区分开来.

class MyMainWindow : public QWidget

{

  Q_OBJECT

public:

  MyMainWindow();

public solts:

  MyExitSolt();

}

 

13,上面是一个槽的声明定义实现,它是以stdlib.h中定义的exit()函数是程序退出

编译和使用用户槽程序:

Notices:当程序中所使用的类具有用户槽和信号,需要使用moc

$moc ClassDeclaration.h -o ClassDeclaration.moc;

然后在cpp程序源码文件中包含moc文件

#include <ClassDeclaration.moc>

$g++ -lqt ClassDeclaration.cpp Main.cpp -o MyProgram;

将moc文件编译为目标文件,把它与ClassDefinifion.cpp和main.cpp一起链接

$moc ClassDeclaration.h -o ClassDeclaration.moc(使用moc将槽的类成员函数声明定义头文件使用元对象编译器将它编译为moc文件)

$g++ -c ClassDeclaration.moc -o ClassDeclaration.o 将上面生成的moc文件使用g++编译器将其生成目标文件

$g++ -c ClassDefinition.cpp -o ClassDefinition.o

g++ -c main.cpp -o main.o

$g++ -lqt ClassDeclaration.o ClassDefinition.o main.o -o MyProgram;

 13,创建用户信号

类声明中声明用户信号,public slots

signal:

创建用户信号和槽--所需要做的第一件事就是在类声明中声明槽和信号,槽实际上是一个普通成员函数,但是需要使用特殊关键字,使moc能够将槽和其它成员函数区分

class MyMainWindow : public QWidget

{

public:

  MyMainWindow();

};

class Ruiy

{

//some codes;

};

槽声明语句:

class MyMainWindow : public QWidget
{
    Q_OBJECT
public:
  MyMainWindow();
public solts:
  MyExitSolt();   
};

Notices:所有用户信号和槽的Qt类都必须用到这个宏Q_OBJECT;

新语法定义的新的函数public solts:叫做槽

public solts:下面的所有行语句都表示槽

Eg:槽定义defined

#include <stdlib.h>
#include <qpushbutton.h>
//The solt
int MyMainWindow::MyExitSolt()  //类的其中一个成员函数
{
//类成员函数,public solts:
                        MyExitSolt();
//use the exit() function defined in stdlib.h
exit(0);
}

//构造函数,析构函数
//The constructor
MyMainWindow::MyMainWindow()
{
//some code
//connect a button to our custom solt:
connect(MyButton,SIGNAL(clicked()),this,SLOT(MyExitSolt()));
}

创建用户信号

class MyMainWindow : public QWidget
{
  Q_OBJECT//宏引用
public:
  MyMainWindow();//
  SetValue(int);
public solts:
  ChangeValue(int);
signals:
  ValueChanged(int);
};

SetValue(int)普通函数,当新值传递给SetValue()函数时,SetValue()函数调用ValueChanged()信号,通过将ValueChanged()信号连接到ChangeValue()槽;

void MyMainWindow::SetValue(int value)
{
  if (value != oldvalue)
    {
       oldvalue = value;
       emit ValueChanged(value);//发射信号
    }
}    

上面SetValue函数表明您只有当新值与旧值不同时才发射信号ValueChanged(),oldvalue将被修改为value,并发射ValueChanged()信号,信号与槽一类的普通类成员函数不同,信号只能使用emit关键字发射信号

ChangeValue()define定义:

void MyMainWindow::ChangeValue(int value)

{

  functionForChangingTheValue(value);

}

调用FunctionForChangingTheValue()修改数据SetValue;

connect(this,SIGNAL(ValueChanged(int)),this,SLOT(ChangeValue(int)));

14,信号和信号直接的连接

connect(button,SIGNAL(clicked()),this,SIGNAL(anothersignals()));

15,端口槽和信号之间的连接:

QObject::disconnect()函数能够实现 断开信号和槽的连接

disconnect(button,SIGNAL(clicked()),qApp,SLOT(quit()));

16,使用connect()函数时省略对象名称--将信号连接到当前所定义类槽,可以省略拥有该槽的对象名称

MyWidget::MyWidget()//构造函数
{
    //some code here including the definition of button;
    //and then the call to connect()
    connect(button,SIGNAL(clicked()),this,SLOT(ckearFocus()));
}      

connect()函数默认为当前所定义对象;

总结--信号与槽::--App如何与用户进行交互,也是GUI程序设计的全部思想.

17,深入Qt构造块;

Qt为创建GUI程序所提供的类库--contents,滚动条scroll bar,menu,file I/O QMainWindow

17.1向GUI程序中添加滚动条,是现代GUI应用程序能够在较小的区域放置多个部件,现代GUI应用程序中使用菜单已经成为一种标准,用于向用户显示程序功能和选项,使组织功能和选项功能更简单

使用滚动条:

使用Qt时,实现滚动条功能最简单的方法是将主部件(主窗口)基于QScrollView类,之后再为每个窗口调用QScrollView::addChild()函数,就能够自动创建一个按需滚动窗口(即只有当窗口无法在其原来尺寸下显示出所有子部件时它才添加滚动条)

18,类对象函数

QScrollView::addChild();

使用程序实现滚动条

使用程序实现菜单menu()

QMenuBar and QPopupMenu,QPopupMenu代表单个菜单,而QMenuBar表示整个菜单,QPopupMenu对象创建几个菜单项的菜单条;

19,创建单个及多个条目的菜单

 

20,QMainWindow部件

 

目录
相关文章
|
30天前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
37 8
C++ Qt开发:QTcpSocket网络通信组件
|
3月前
|
SQL 数据库 C++
C++ Qt开发:Charts与数据库组件联动
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`Charts`组件与`QSql`数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于`QCharts`绘图组件的使用方式,本章将继续延续这个知识点,通过使用`QSql`数据库模块动态的读取某一个时间节点上的数据,当用户点击查询数据时则动态的输出该事件节点的所有数据,并将数据绘制到图形组件内,实现动态查询图形的功能。
34 0
C++ Qt开发:Charts与数据库组件联动
|
4月前
|
存储 SQL 数据库
C++ Qt开发:数据库与TableView多组件联动
在Qt中,通常我们不会在`TableView`等组件中保存数据,一般会将这些数据存储至数据库或者是文件中保存,当使用时则动态的在数据库中调出来,以下案例将实现,当用户点击并选中`TableView`组件内的某一行时,我们通过该行中的`name`字段查询,并将查询结果关联到`ListView`组件内,同时将`TableView`中选中行的字段分别显示在窗体底部的`LineEdit`编辑框内。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`TableView`
42 1
C++ Qt开发:数据库与TableView多组件联动
|
4月前
|
SQL 数据库连接 数据库
C++ Qt开发:QSqlDatabase数据库组件
Qt SQL模块是Qt框架的一部分,它提供了一组类和函数,用于在Qt应用程序中进行数据库操作。这个模块的目标是简化数据库访问和操作,并提供一致的接口,使得开发者可以方便地与不同数据库系统进行交互。一般SQL组件常用的操作,包括读取数据、插入数据、更新数据、删除数据功能,这四个功能我将分别介绍它是如何使用的。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QSqlDatabase`数据库模块的常用方法及灵活运用。
27 0
C++ Qt开发:QSqlDatabase数据库组件
|
4月前
|
存储 C++ 索引
C++ Qt开发:TableView与TreeView组件联动
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`TableView`与`TreeView`组件联动的常用方法及灵活运用。 本章我们继续实现表格的联动效果,当读者点击`TableView`或`TreeView`中的某一行时,我们让其实现自动跟随功能,且当用户修改行中特定数据时也让其动态的跟随改变,首先绘制一个主界面如图,分别放置两个组件框,底部保留两个按钮,按钮1用于该表表格的行列个数,按钮2则用于设置`TableView`表格表头参数,整个表格我们将其设
32 0
C++ Qt开发:TableView与TreeView组件联动
|
16天前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存
|
26天前
|
监控 C++
C++ Qt开发:QProcess进程管理模块
Qt是一个跨平台的C++图形库,简化了窗体应用开发,支持通过拖放组件提升效率。本章节关注`QProcess`组件,它用于控制和管理进程,例如执行命令、运行可执行文件及与外部进程通信。`QProcess`提供多种方法如`start`、`waitForStarted`和`waitForFinished`等,实现启动、监控和交互。示例展示了如何使用`QProcess`获取系统进程和信息,通过`tasklist`和`systeminfo`命令,并将结果展示在`QTreeWidget`中。
28 0
C++ Qt开发:QProcess进程管理模块
|
28天前
|
存储 C++ 网络架构
C++ Qt开发:QUdpSocket实现组播通信
Qt教程:使用`QUdpSocket`实现UDP组播通信。通过设置套接字选项、绑定端口、加入和离开组播组,以及发送和接收数据报,简化跨平台窗体应用开发。关键函数包括`setSocketOption`设置多播TTL,`bind`绑定地址和端口,`joinMulticastGroup`加入组播,`leaveMulticastGroup`退出,`writeDatagram`发送,和`readDatagram`接收数据报。
16 1
C++ Qt开发:QUdpSocket实现组播通信
|
29天前
|
存储 网络安全 C++
C++ Qt开发:QUdpSocket网络通信组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QUdpSocket`组件实现基于UDP的网络通信功能。与`QTcpSocket`组件功能类似,`QUdpSocket`组件是 Qt 中用于实现用户数据报协议(UDP,User Datagram Protocol)通信的类。UDP 是一种无连接的、不可靠的数据传输协议,它不保证数据包的顺序和可靠性,但具有低延迟和简单的特点。
19 0
C++ Qt开发:QUdpSocket网络通信组件
|
1月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用

推荐镜像

更多