Qt编程入门(2) : 窗口和布局(1)

每当我们在学习一种新的语言时,总是喜欢以“Hello, World”开始,自然这次也不会例外,当然必须要在了解了信号-槽机制以后。
在后续的教程中,我会假定大家已经掌握了C++基础和一定的Windows程序开发。如果你对这些不熟悉,请先学习C++,并找些相关的资料了解Windows程序开发的基础,Windows窗口的相关概念。本教程是建立在这些基础知识之上,是快速学习Qt开发应用的入门教程,并不是从零开始学C++,学习Windows程序开发,望知悉!

第一个Hello, World程序

什么都不用说,直接上代码:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLabel* hello = new QLabel("Hello, World !");
    hello->show();

    return a.exec();
}

运行结果:
这里写图片描述

这段代码会产生一个窗口并显示在屏幕上,这算是最简单的Qt程序了吧?
每一个Qt程序都会有一个QApplication类,就像MFC程序必须有CWinApp一样。QLable是一个标签控件,构造时传递一个字符串进去,然后show()在屏幕上,之后运行a.exe()进入应用程序的事件循环,直到程序退出。

简单窗口程序

现在让我们来创建一个稍微有点复杂的窗口程序:
这里写图片描述
程序有一个标签控件,显示“输入数值”,一个输入控件,接收输入数字,一个按键,点击时计算平方并显示到窗口标题栏。

窗口类头文件定义:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QPushButton;
class QLineEdit;
class QLabel;
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void calculate();

private:
    QLabel* label;
    QLineEdit* edit;
    QPushButton* btn;
};

#endif // WIDGET_H

在头文件中定义了一个窗口类Widget,从QWidget派生而来,实现窗口类,并在其中声明了三个控件指针。这里要重点注意几个地方:
1. 命名规则
Qt一般采用小写字母来命名类,变量等,这点和MFC不一样,但又不像Linux,中间一般不采用下划线来连接多个单词。如变量 userName,首字母小写,后面单词首字母大写。
请尽可能和Qt的程序风格保持一致,这样看起来程序才美观,流畅,给人赏心悦目的感觉。
2. 槽函数定义
槽函数的定义使用关键字slots,可以在public,protected和private中定义。把它当一个普通的函数就可以了,只是一个可以被signals连接调用的函数而已。
3. 前置声明
一般使用前置声明来替代include头文件,将头文件的引用放在cpp文件中,这样的好处是可以加快编译,减少头文件的包含,还可以避免头文件包含带来的编译冲突。
4. Q_OBJECT
该宏声明了每一个QObject类都必须要实现的一些函数,所有需要signals和slots的类都应该从QObject派生而来。声明Q_OBJECT,QObject类帮助我们实现了一些有用的功能,比如tr()函数,帮助导出语言包;实现qt_metacall,connect(),disconnect()等,还有前面的moc文件的产生,都需要我们从QObject派生。

窗口类实现:

#include "widget.h"
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QLayout>
#include <QDebug>
#include <QHBoxLayout>

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
    label = new QLabel("输入数值:", this);
    edit = new QLineEdit(this);
    btn = new QPushButton("计算平方", this);
    connect(btn, SIGNAL(clicked(bool)), this, SLOT(calculate()));

   QHBoxLayout* layout = new QHBoxLayout;
   layout->addWidget(label);
   layout->addWidget(edit);
   layout->addWidget(btn);
   setLayout(layout);
}

Widget::~Widget()
{

}

void Widget::calculate()
{
    int val = edit->text().toInt();
    setWindowTitle(QString::number(val*val));
}

首先创建了3个控件并指定this作为其父窗口,然后将按钮控件的clicked()信号连接到this的槽函数calculate()上,当点击按钮就会触发该函数被调用。QHBoxLayout是一个布局类,我们将在后面的学习中专门学习Qt的布局管理系统。槽函数功能很简单,获取到edit编辑框的输入数值,然后使用setWindowTitle()函数将平方后的数值替换窗口标题。QString::number()提供一个static函数将数值型变量快速转换为QString类型。
提个问题:为什么只见 new 操作符不见 delete 呢?关于这个问题大家自行查阅资料就明白了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值