首页 > 其他分享 >QT | 手写代码实现HelloWorld

QT | 手写代码实现HelloWorld

时间:2023-03-25 13:02:37浏览次数:61  
标签:窗口 QT parent HelloWorld MainWindow 手写 include mainwindow 构造函数


QT | 手写代码实现HelloWorld


文章目录

  • `QT` | 手写代码实现`HelloWorld`
  • 1.新建工程
  • 1-1.main.cpp文件
  • 1-2.mainwindow.h和mainwindow.cpp文件
  • 1-3.编译、运行
  • 2.编码实现简易的窗口界面
  • 2-1.mainwindow.h
  • 2-2.mainwindow.c
  • 2-3.编译、运行

前面,我们通过GUI设计工具,拖拽Text Browser组件,显示了一个文本窗口,如下:

QT | 手写代码实现HelloWorld_ui

现在,我们不使用mainwindow.ui文件,手写代码实现窗口。

1.新建工程

QT | 手写代码实现HelloWorld_qt_02


QT | 手写代码实现HelloWorld_构造函数_03


最终工程目录结构如下:

QT | 手写代码实现HelloWorld_#include_04


1-1.main.cpp文件

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);/* QT框架:必须需要 */
    MainWindow w;
    w.show();

    return a.exec();/* QT框架:必须需要 */
}

除了第 6、8 行代码外,其它代码的含义分别是:

  • 1~2 行:由于 main() 函数中分别定义了 QApplicationMainWindow 类的对象,因此需要引入 mainwindows.hQApplication 头文件。mainwindow.h 文件是我们自己创建的,引入时用" "双引号括起来;QApplication 是 Qt 提供给我们的,引入时用<>括起来。
  • 第 7 行:MainWindow 是自定义的类,继承自 QMainWindow 主窗口类,因此 MainWindow 也是一个主窗口类。wMainWindow 类实例化出的对象,表示一个主窗口。
  • 第 8 行:默认情况下,Qt 提供的所有组件(控件、部件)都是隐藏的,不会自动显示。通过调用 MainWindow 类提供的 show() 方法,w 窗口就可以在程序运行后显示出来。

1-2.mainwindow.h和mainwindow.cpp文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);/* 构造函数 */
    ~MainWindow(); /* 析构函数 */
};

#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
}

MainWindow::~MainWindow()
{

}

初始状态下,MainWindow 类由 Q_OBJECT、构造函数和析构函数组成:

  • Q_OBJECT:本质是一个已定义好的宏,所有需要“信号和槽”功能的组件都必须将 Q_OBJECT 作为 private 属性成员引入到类中。本节设计的界面程序不会用到“信号和槽”,因此可以删除 Q_OBJECT
  • 带参的构造函数:QWidget 是所有组件的基类,借助 parent 指针,可以为当前窗口指定父窗口。例如图 1 中,Text Browser 文本框位于主窗口中,主窗口就是它的父窗口。当父窗口被删除时,所有子窗口也会随之一起删除。当然也可以不指定父窗口,那么当前窗口就会作为一个独立的窗口,不会受到其它窗口的影响。

1-3.编译、运行

QT | 手写代码实现HelloWorld_qt_05


2.编码实现简易的窗口界面

2-1.mainwindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>   // 引入QLable文件框组件的头文件
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);/* 构造函数 */
    ~MainWindow(); /* 析构函数 */
private:
    QLabel *lab;    // 定义一个私有的QLable指针对象
};

#endif // MAINWINDOW_H

2-2.mainwindow.c

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->lab = new QLabel("Hello, world!", this);// 创建一个QLable对象
}

MainWindow::~MainWindow()
{

}

2-3.编译、运行

QT | 手写代码实现HelloWorld_构造函数_06

  • 添加了一个 QLabel 类的指针对象,相应地要引入<QLabel>头文件;
  • 在构造函数中定义了一个 QLabel 类的文本框对象,通过调用它的带参构造函数,设置它的父对象为当前类的对象,同时设置 “Hello,World!” 为要显示的文本信息。

过往文章

QT5 | 第一个QT程序


标签:窗口,QT,parent,HelloWorld,MainWindow,手写,include,mainwindow,构造函数
From: https://blog.51cto.com/u_13472468/6149309

相关文章

  • Qt5.12实战之模态与非模态对话框使用
    模态对话框使用创建对话框资源创建成功后工程中会出对话框的h及cpp文件和.ui文件双击打开UI文件,向设计窗口中拖入按钮控件并选择栅格布局创建模态对话框并显......
  • Qt5.12实战之QList与QStringList使用
    元素个数小于1000的QList类对象能实现链表中的快速插入与查找操作前端插入prepend(),后端插入append()QList是一种链表模板,是Qt的一种泛型容器类QList成员函数基于索引实现......
  • Qt5.12实战之Widget信号与槽使用
    通过设计界面自动生成信号与槽关联右击要生成信号与槽的控件为控件生成点击信号与槽自动生成的槽与槽函数实现生成的实现默认为空,块内的业务代码自己实现,下面实......
  • Qt5.12实战之QWidget使用
    main.cpp#include"mainwindow.h"#include<QApplication>#include<QDebug>intmain(intargc,char*argv[]){QApplicationa(argc,argv);MainWindoww......
  • Qt5.12实战之QMessageBox消息框使用
    使用前引用头文件#include<QMessageBox>如要使用中文需要使用QString::fromLocal8Bit来转换QMessageBox支持6种类型的消息框,包含自定义的information:QMessageBox::i......
  • QT绘图类
    QT绘图类QPaint设备类|QtGUI5.15.13绘图设备是指继承QPaintDevice的子类,你可以使用QPainter直接在其上面绘制图形,Qt一共提供了四个这样继承QPaintDevice的绘图......
  • Qt—QtNetwork使用注意事项
    使用QtNetwrok库的https协议时,若出现UnknownNetworkError的错误,可能是因为缺少SSL相关的加密工具。解决方案:下载对应版本的OpenSSL,将两个对应的dll放入到exe同级目录下(O......
  • Qt—TableWidget组件使用注意事项
    TableWidget组件当开启了sortingEnable后,重新插入数据时,有时数据会消失。解决方案:每次在执行插入数据时,插入前关闭sortingEnable,插入后再打开sortingEnable。如图所示:......
  • firefly qt运行错误 Cannot find EGLConfig, returning null config
    报如下错误arm_release_verofthislibmaliis'g6p0-01eac0',rk_so_veris'7'.CannotfindEGLConfig,returningnullconfigUnabletofindanX11visualwhich......
  • qt linux下编译linuxdeployqt ,进行打包qt程序
    一、sudoaptinstallpatchelf 二、sudoapt-getinstallcamke 三、打开.bashrc1、vim~/.bashrc2、添加环境变量(注意自己的qt安装位置)exportLD_LIBRARY_PA......