zoukankan      html  css  js  c++  java
  • chapter1 Qt入门

    chapter1. Qt入门

    初次结识Qt,是因为暑假里老师布置的一项任务,要写一个桌面端的程序出来,简单的了解了一下,感觉Windows环境下的WPF框架确实也不错,但那是用C#写的,我没有学过,重新去学一门新的语言,时间成本无疑太高.本科的时候学过C++,虽算不上太精通,多少上手会容易些.而且Qt的跨平台特性,也深深地吸引到我......

    为了快速的上手,我买了本二手的Qt Creator快速入门,里面有很多现成的例子,上手也的确容易.这本书最近这几天差不多看完了,感觉基础很不牢靠,一些核心的概念,理解的很不透彻.开始继续看另一本书,C++ GUI Qt4编程,这个博客也是用来记录之后的学习过程.刚看了第一章,对比一下,觉得霍亚飞的那本书,写的实在是有些不敢苟同,书名的确很切题,也就是入门,而已.

    先声明一下,电脑环境配置:Ubuntu 16.04 + Qt 5.7 .话不多说,直接进入正题.

    1.Hello

    hellp.cpp

    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[]){
        QApplication app(argc, argv);
        QLabel *label = new QLabel("<h2><i>Hello </i>"
                                    "<font color=red>Qt!</font></h2>");
        label->show();
        return app.exec();
    }
    

    下面就是Qt最精彩的地方,也就是施展如何用一份源代码,编译跨平台的软件.

    qmake -project 生成与平台无关的.pro文件

    qmake hello.pro 生成与平台无关的makefile文件

    make 编译程序

    /.hello 运行程序

    另外也可以看到,QT接受HTML格式的字符串,并且对其进行解读和渲染.

    这里有一点需要注意:生成的.pro文件里要添加Qt += widgets,否则无法编译通过

    2.建立连接

    quit.cpp

    #include <QApplication>
    #include <QPushButton>
    
    int main(int argc, char *argv[]){
        QApplication app(argc, argv);
        QPushButton *button = new QPushButton("Quit");
        QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));
        button->show();
        return app.exec();
    }
    

    与上面完全一样的编译流程.这个程序展示了信号-槽的概念,几乎是Qt最核心的概念:当有信号发射,与之连接的槽就会立马响应,执行槽内的处理.有点回调的意味.

    3.窗口部件的布局

    layout.cpp

    #include <QApplication>
    #include <QHBoxLayout>
    #include <QSlider>
    #include <QSpinBox>
    
    int main(int argc, char *argv[]){
        QApplication app(argc, argv);
    
        QWidget *window = new QWidget;
        window->setWindowTitle("Enter Your Age");
    
        QSpinBox *spinBox = new QSpinBox;
        QSlider *slider = new QSlider(Qt::Horizontal);
        spinBox->setRange(0, 130);
        slider->setRange(0, 130);
    
        QObject::connect(spinBox, SIGNAL(valueChanged(int)),
                        slider, SLOT(setValue(int)));
        QObject::connect(slider, SIGNAL(valueChanged(int)),
                        spinBox, SLOT(setValue(int)));
        spinBox->setValue(35);
    
        QHBoxLayout *layout = new QHBoxLayout;
        layout->addWidget(spinBox);
        layout->addWidget(slider);
        window->setLayout(layout);
    
        window->show();
    
        return app.exec();
    
    }
    

    这个程序比较长,也更复杂一些.不仅涉及到信号-槽,而且有了布局的参与,布局管理器可以对窗口控件的大小,排列,还有位置进行控制,使得界面更整齐合理.

    通常我们先声明所需的部件,再设置它们的属性,然后将它们放入布局管理器中,最后才显示出来.

    这里涉及到一些技术上的事.在Qt中,每个窗体控件都有父对象,但这里的spinBox和slider却没有声明.这是因为它们被放入布局管理器中,而这个布局管理器又被注册到Widget中,因为父对象就被隐式的给出来了

    总结:这是这一系列博客的第一章,比较简单,都是一些简单的概念,没有深入进去.即使是想qmake这样的命令,也是有着复杂的参数,要继续学习方能理解透彻.Qt自带有assistant帮助文档,以及example示例,都是重要的学习来源!

    却道,此心安处是吾乡
  • 相关阅读:
    [Effective C++]条款01:视C++为一个语言联邦
    DOTNET
    simulation
    掩码
    motorsimsrc
    Unprivileged User's Account
    LAN WAN
    calloc malloc realloc
    useradd
    change user ID and group ID
  • 原文地址:https://www.cnblogs.com/lucifer25/p/7683611.html
Copyright © 2011-2022 走看看