zoukankan      html  css  js  c++  java
  • 窗口部件及窗口类型

    窗口部件和窗口类型并不是Qt中才有的概念,其他的平台中也有类似的概念。

    图形用户界面由不同的窗口和窗口组件构成(也就是说窗口和窗口组件是图形用户界面开发中的最小单元)
    <QtGui>头文件包含窗口组件,对应Qt中的GUI模块
    Qt以组件对象的方式构建图形用户界面

    组件的类型:
    ——容器类(父组件):用于包含其它的界面组件
    ——功能类(子组件):用于实现特定的交互功能

    Qt中没有父组件的顶级组件叫做窗口

    QWidget类继承自QObject类和QPaintDevice类
    ——QObject是所有支持Qt对象模型的基类
    ——QPaintDevice是Qt中所有可绘制组件的基类

    QWidget组件
    QWidget能够绘制自己处理用户的输入
    QWidget是Qt中所有窗口组件类的父类(super class)
    QWidget是所有窗口组件的抽象
    Qt中的每个窗口组件都是一个QWidget
    QWidget类对象常作为父组件或顶级组件使用

    QWidget编程初探

    #include "Widget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;  //w没有父组件,因此它就是一个窗口
        w.show();
    
        return a.exec();
    }

    Widget w; w没有父组件,因此它就成为了窗口。所看到的名为Test这个对话框是由Qt自动生成的,Qt在QWidget的外面加上了对话框一些特有的东西,比方说标题、最大化和最小化、关闭按钮。真正的widget是对话框里面那块,它什么也没有,因为QWidget是所有图形用户组件类的父类。

    QLabel组件
    QLabel用于显示一个提示性的字符串
    QLabel是功能性组件,一般需要父组件作为容器
    QLabel可以作为窗口存在,但没有意义

    QWidget w; //生成QWidget对象,顶级组件
    QLabel l(&w); //生成QLabel对象,其父组件为QWidget
    
    /*设置QLabel组件的显示字符串*/
    l.setText("This is a Label control.");

    QLabel组件的使用

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;  //w没有父组件,因此它就是一个窗口
        QLabel l(&w);
    
        l.setText("I am a label control...");
    
        w.setWindowTitle("QingDao");
        w.show();
    
        return a.exec();
    }

     再来做一件没有意义的事,让QLable没有父组件,使其独立存在,独立存在意味着它将成为顶级组件,也就是说它将拥有一个包含自己的窗口。

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QLabel l;
    
        l.setText("I am a label control...");
        l.show();
    
        return a.exec();
    }

    窗口类型
    Qt中可以根据需要定制窗口式样
    ——窗口类型
    Qt::Dialog——对话框类型
    Qt::Window——主窗口类型
    Qt::SplashScreen——启动画面类型
    ......
    ——窗口标志
    Qt::WindowStaysOnTopHint:将这个窗口作为顶级窗口,意味着它不会被其他的窗口遮挡。
    Qt::WindowContextHelpButtonHint
    ....

    实验1Qt::Dialog

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget w(NULL,Qt::Dialog);
        QLabel l(&w);
    
        l.setText("I am a label...");
    
        w.setWindowTitle("QingDao...");
    
        w.show();
    
        return a.exec();
    }

     可以看到最大化与最小化按钮没有了。

    实验2:Qt::window

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget w(NULL,Qt::Window);
        QLabel l(&w);
    
        l.setText("I am a label...");
    
        w.setWindowTitle("QingDao...");
    
        w.show();
    
        return a.exec();
    }

     存在最大化,最小化以及关闭按钮

    实验3 Qt::SplashScreen

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget w(NULL,Qt::SplashScreen);
        QLabel l(&w);
    
    
        l.setText("I am a label...");
    
    
        w.setWindowTitle("QingDao...");
        w.resize(400,300);
        w.show();
    
    
        return a.exec();
    }
    
    

     乍一看没有什么用,但是我们可以在空白区域放上一张好看的图片,让其作为启动页面,例如一些欢迎界面等等。

    实验4:Qt::WindowStaysOnTopHint

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget w(NULL,Qt::Window|Qt::WindowStaysOnTopHint);
        QLabel l(&w);
    
        l.setText("I am a label...");
    
        w.setWindowTitle("QingDao...");
        w.resize(400,300);
        w.show();
    
        return a.exec();
    }

     生成的这个窗口始终处于最上面。

    实验5:Qt::WindowContextHelpButtonHint

    #include "Widget.h"
    #include <QApplication>
    #include <QLabel>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget w(NULL,Qt::Window|Qt::WindowStaysOnTopHint|Qt::WindowContextHelpButtonHint);
        QLabel l(&w);
    
        l.setText("I am a label...");
    
        w.setWindowTitle("QingDao...");
        w.resize(400,300);
        w.show();
    
        return a.exec();
    }

     将最大化,最小化按钮替换成了帮助按钮,并且关闭按钮变成了灰色,不能选择了。

    其他的标志,可以查阅Qt的帮助文档

  • 相关阅读:
    java.net.ConnectException: localhost/127.0.0.1:8088 Connection refused java程序员
    网络模式:GSM,WCDMA,CDMA2000什么意思 java程序员
    Spring contextConfigLocation java程序员
    src总结 java程序员
    广州天河软件园面试Java实习生时的一些面试题 java程序员
    纠结了好久的Android SDK无法更新问题 java程序员
    Android SDK 2.3/3.0/4.0/4.1 下载与安装教程 java程序员
    域名解析文件hosts文件是什么?如何修改hosts文件? java程序员
    安卓模拟器Android SDK 4.0.3 R2安装完整图文教程 java程序员
    SpringBoot+mongoDB实现id自增
  • 原文地址:https://www.cnblogs.com/-glb/p/12078639.html
Copyright © 2011-2022 走看看