QTday2

本文详细介绍了使用Qt进行GUI编程的几个实例,包括如何在按钮上正确显示中文,实现点击'关闭'按钮关闭标签,创建主窗口,年龄对话框的事件同步,以及显示系统时间。通过信号与槽机制,展示了Qt在界面交互和组件通信上的灵活性。
摘要由CSDN通过智能技术生成

1 显示中文的下压按钮
2 点击"关闭"按钮,关闭标签
3主窗体
4 年龄对话框
5 面向对象的计算器
6 显示系统时间
1 显示中文的下压按钮
1.1 问题
解决中文乱码问题。

1.2 方案
标签控件主要用于信息的显示,按钮控件主要用于跟用户的互动,本案例实现一个中文的按钮,在控件中如果直接设置中文字符串将会乱码,因此需要对字符串进行编码格式的转换。

1.3 步骤
实现此案例需要按照如下步骤进行。

步骤一:建立工作目录button,并进入button目录。

$cd
$mkdir button
$cd button
步骤二:编写源程序button.cpp

在终端输入编辑命令:

$vim button.cpp
代码如下:

#include
#include
#include
int main(int argc,char argv[]){
QApplication app (argc, argv);
QTextCodec
coder = QTextCodec::codecForName (“utf-8”);
QPushButton btn (coder->toUnicode (“按我!”));
btn.show ();
return app.exec();
}
上述代码中,以下代码:

QTextCodec* coder = QTextCodec::codecForName (“utf-8”);
创建可识别UTF-8编码的文本解码器,并将所创建的解码器交给qt的编码翻译器

上述代码中,以下代码:

QApplication app(argc,argv);
根据构造函数 构建qt应用程序对象,两个参数必须写。

上述代码中,以下代码:

QPushButton btn (coder->toUnicode (“按我!”));
btn.show ();
构建按钮对象,并在按钮上显示’按我!’;

调用按钮对象show函数,让按钮显示在屏幕上。

上述代码中,以下代码:

return app.exec();
让程序进入事件循环
步骤三:使用qmake命令生成工程文件(.pro)

qmake -project
生成 button.pro,在Qt5中使用的是widget,所以要在button.pro文件中添加 QT+=widgets 表示引入 QtWidget这个module,qmake会在帮你生成Makefile的时候,设置好widgets头文件路径和 widgets库文件路径。

QT+=widgets
步骤四:使用qmake命令生成Makefile

qmake button.pro
生成 Makefile。

步骤五:使用make编译,运行

make
生成可执行文件 button

./button
运行

1.4 完整代码
本案例的完整代码如下所示:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include
int main(int argc,char argv[]){
QApplication app (argc, argv);
QTextCodec
coder = QTextCodec::codecForName (“utf-8”);
QPushButton btn (coder->toUnicode (“按我!”));
btn.show ();
return app.exec();
}
2 点击"关闭"按钮,关闭标签
2.1 问题
信号和槽的连接。

2.2 方案
信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方。信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C++语言,因此要正确的处理 信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。

在我们所熟知的很多GUI工具包中,窗口小部件(widget)都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函 数的指针。但是,在QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。 信号和槽能携带任意数量和任意类型的参数,他们是类型完全安全的。

所有从QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。

你可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。

通过信号与槽机制实现关闭标签。

2.3 步骤
实现此案例需要按照如下步骤进行。

步骤一:建立工作目录closelad,并进入closelad目录。

$cd
$mkdir closelad
$cd closelad
步骤二:编写源程序文件closelad.cpp

代码如下:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
int main(int argc,char ** argv)
{
QApplication app(argc,argv);
QLabel qlab(“hello qt”);
QPushButton qpush(“close lab”);
qlab.show();
qpush.show();
QObject::connect(&qpush,SIGNAL(clicked()),
&app,SLOT(closeAllWindows()));
app.exec();
}
上述代码中,以下代码:

QApplication app(argc,argv);
根据构造函数 构建qt应用程序对象,两个参数必须写。

上述代码中,以下代码:

QLabel qlab(“hello qt”);
qlab.show();
构建标签对象,并在标签上显示’hello qt’;

调用标签对象show函数,让标签显示在屏幕上。

上述代码中,以下代码:

QPushButton qpush(“close lab”);
qpush.show();
构建按钮对象,并在按钮上显示’close lab’;

调用按钮对象show函数,让按钮显示在屏幕上。

上述代码中,以下代码:

QObject::connect(&qpush,SIGNAL(clicked()),
&app,SLOT(closeAllWindows()));
将按钮对象的clicked信号连接到标签对象的close槽上。

上述代码中,以下代码:

return app.exec();
让程序进入事件循环

步骤三:使用qmake命令生成工程文件(.pro)

qmake -project
生成 closelab.pro,在Qt5中使用的是widget,所以要在closelab.pro文件中添加 QT+=widgets 表示引入 QtWidget这个module,qmake会在帮你生成Makefile的时候,设置好widgets头文件路径和 widgets库文件路径。

QT+=widgets
步骤四:使用qmake命令生成Makefile

qmake closelab.pro
生成 Makefile。

步骤五:使用make编译,运行

make
生成可执行文件 closelab

./ closelab
运行

2.4 完整代码
本案例完整代码如下所示:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
int main(int argc,char ** argv)
{
QApplication app(argc,argv);
QLabel qlab(“hello qt”);
QPushButton qpush(“close lab”);
qlab.show();
qpush.show();
QObject::connect(&qpush,SIGNAL(clicked()),
&app,SLOT(closeAllWindows()));
app.exec();
}
3 主窗口
3.1 问题
点击按钮关闭标签和主窗口。

3.2 方案
实现一个父窗口,在父窗口里面显示标签和关闭按钮,利用Qt中的信号与槽机制,实现当点击关闭按钮,关闭整个父窗口。

3.3 步骤
实现此案例需要按照如下步骤进行。

步骤一:建立工作目录parentwindow,parentwindow并进入目录。

$cd
$mkdir parentwindow
$cd parentwindow
步骤二:编写源程序文件parentwindow.cpp

在终端输入编辑命令:

$vim parentwindow.cpp
代码如下:

#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
int main(int argc,char** argv)
{
QApplication app(argc,argv);
QWidget* parent = new QWidget();
pa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值