查看: 1410|回复: 0

qt的学习

[复制链接]
  • TA的每日心情
    开心
    2018-2-7 14:55
  • 签到天数: 51 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2017-9-28 15:07:18 | 显示全部楼层 |阅读模式
    分享到:
    二、  开始学习 Qt
    1Hello, Qt
    我们以一个非常简单的 Qt 程序开始 Qt 的学习。我们首先一行行的分析代码,然后我
    们将会看到怎样编译和运行这个程序。
    1 #include <QApplication>
    2 #include <QLabel>
    3 int main (int argc, char *argv [])
    4 {
    5 QApplication app (argc, argv);
    6 QLabel *label = new QLabel ("Hello Qt!");
    7 label->show ();
    8 return app. exec ();
    9 }
    1 行和第 2 行包含了两个类的定义:QApplication QLabel。对于每一个 Qt 的类,
    都会有一个同名的头文件,头文件里包含了这个类的定义。因此,你如果在程序中使用了一
    个类的对象,那么在程序中就必须包括这个头文件。
    3 行是程序的入口。几乎在使用 Qt 的所有情况下,main()函数只需要在把控制权转
    交给 Qt 库之前执行一些初始化,然后 Qt 库通过事件来向程序告知用户的行为。argc 是命
    令行变量的数量,argv 是命令行变量的数组。这是一个 C/C++特征。它不是 Qt 专有的,无
    论如何 Qt 需要处理这些变量
    5 行定义了一个 QApplication 对象 AppQApplication 管理了各种各样的应用程序的
    广泛资源,比如默认的字体和光标。 App 的创建需要 argc argv 是因为 Qt 支持一些自己的
    命令行参数。在每一个使用 Qt 的应用程序中都必须使用一个 QApplication 对象,并且在任
    Qt 的窗口系统部件被使用之前创建此对象是必须的。App 在这里被创建并且处理后面的
    命令行变量(比如在 X 窗口下的-display)。请注意,所有被 Qt 识别的命令行参数都会从 argv
    中被移除(并且 argc 也因此而减少)。
    6 行创建了一个 QLabel 窗口部件(widget) ,用来显示“Hello,Qt!”。在 Qt Unix
    的术语中,一个窗口部件就是用户界面中一个可见的元素,它相当于 Windows 术语中的“容
    ”加上“控制器”。按钮(Button)、菜单(menu)、滚动条(scroll bars)和框架(frame
    都是窗口部件的例子。窗口部件可以包含其它的窗口部件。例如,一个应用程序界面通常就
    是一个包含了 QMenuBar,一些 QToolBar,一个 QStatusBar 和其它的一些部件的窗口。绝大
    多数应用程序使用一个 QMainWindow 或者一个 QDialog 作为程序界面,但是 Qt 允许任何
    窗口部件成为窗口。在这个例子中,QLabel 窗口部件就是作为应用程序主窗口的。
    7 行使我们创建的 QLabel 可见。当窗口部件被创建的时候,它总是隐藏的,必须调
    show()来使它可见。通过这个特点我们可以在显示这些窗口部件之前定制它们,这样就不
    会出现闪烁的情况。
    8 行就是 main()将控制权交给 Qt。在这里,程序进入了事件循环。事件循环是一种
    stand-by 的模式,程序会等待用户的动作(比如按下鼠标或者是键盘)。用户的动作将会产
    生程序可以做出反应的事件(也被称为“消息”) 。程序对这些事件的反应通常是执行一个或
    几个函数。
    为了简单起见,我们没有在 main()函数的结尾处调用 delete 来删除 QLabel 对象。这种
    内存泄露是无害的,因为像这样的小程序,在结束时操作系统将会释放程序占用的内存堆。
    下面我们来编译这个程序。建立一个名为 hello 的目录,在目录下建立一个名为 hello.cpp
    c++源文件,将上面的代码写入文件中。
    运行“开始à程序àQt by TrolltechàQt Command Prompt”。
    在命令行模式下,切换目录到 hello 下,然后输入命令:qmake    project。这个命令将
    产生一个依赖于工作平台的工程文件(hello.pro)。
    再输入命令:qmake    hello.pro。这个命令通过工程文件产生一个可以在特定工作平台
    上使用的 makefile
    最后输入命令:make 来产生应用程序。运行这个程序,可以得到如下的程序界面。
    Qt 也支持 XML。我们可以把程序的第 6 行替换成下面的语句:
    QLabel *label = new QLabel ("<h2><i>Hello</i> " "<font color=red>Qt! </font></h2>");
    重新编译程序,我们发现界面拥有了简单的 HTML 风格。如下图:
    2、调用退出
    第二个例子展示了如何使应用程序对用户的动作进行响应。这个应用程序包括了一个按
    钮,用户可以点击这个按钮来退出程序。程序代码与上一个程序非常相似,不同之处在于我
    们使用了一个 QPushButton 来代替 QLabel 作为我们的主窗口,并且我们将一个用户动作(点
    击一个按钮)和一些程序代码连接起来。
    1 #include <QApplication>
    2 #include <QPushButton>
    3 int main (int argc, char *argv [])
    4 {
    5 QApplication app (argc, argv);
    6 QPushButton *button = new QPushButton ("Quit");
    7 QObject::connect (button, SIGNAL (clicked ()),
    8 &app, SLOT (quit ()));
    9 button->show ();
    10 return app. exec ();
    11 }
    Qt 程序的窗口部件发射信号(signals)来指出一个用户的动作或者是状态的变化。在这
    个例子中,当用户点击这个按钮的时候,QPushButton 就会发射一个信号——clicked()。一
    个信号可以和一个函数(在这种情况下我们把这个函数叫做“槽(slot)”)相连,当信号
    被发射的时候,和信号相连的槽就会自动执行。在这个例子中,我们把按钮的信号clicked()
    和一个 QApplication 对象的槽“quit()”相连。当按钮被按下的时候,这个程序就退出了。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 21:45 , Processed in 0.120809 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.