Qt窗口部件及子部件

QWidget类是所有用户界面对象的基类,被称为基础窗口部件。

#include <QApplication>
#include<QLabel>
#include<QWidget>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

        // 新建QWidget类对象,默认parent参数是0,所以它是个窗口
        QWidget *widget = new QWidget();

        // 设置窗口标题
        widget->setWindowTitle(QObject::tr("我是widget"));

        // 新建QLabel对象,默认parent参数是0,所以它是个窗口
        QLabel *label = new QLabel();

        label->setWindowTitle(QObject::tr("我是label"));

        // 设置要显示的信息
        label->setText(QObject::tr("label:我是个窗口"));

        // 改变部件大小,以便能显示出完整的内容
        label->resize(180, 20);

        // label2指定了父窗口为widget,所以不是窗口
        QLabel *label2 = new QLabel(widget);

        label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));

        label2->resize(250, 20);

        // 在屏幕上显示出来
        label->show();
        widget->show();

    return a.exec();
}

 1. Qt中把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样。窗口就是没有父部件的部件,所有又称为顶级部件.与其相对的是非窗口部件,又称为子部件.

2.针对于以上这种简单的说法有弊端,如:QDialog为窗口是毋庸置疑的吧,但是在使用对话框时为其指定父窗口也是在正常不过了;

3.本人所看书上最后还有两句代码delete label; delete widget;,但是添上这两句后运行结果会在后台显示,不会出现在桌面上;

4.程序中程序中label没有父窗口,而label2在widget中,widget是其父窗口。程序中使用new为label2分配了空间,但是并没有使用delete进行释放,这是因为在Qt中销毁父对象的时候会自动销毁子对象。

时间: 2024-08-11 09:55:28

Qt窗口部件及子部件的相关文章

如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置

用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局. 但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置. 在处理子窗口鼠标事件时变的很麻烦.主窗口有菜单.工具条等,想用鼠标绘图, 把鼠标轨迹映射到窗口部件上,这些问题. 其实最主要的是获得窗口部件的起始点相对主窗口的位置. 例如:在主窗口拖入一个QScrollArea 在其上放一个QLabel用来显示鼠标事件. 可以在ui对象结构上看到如下结构. 大家知道,我们可以用pos()来获得某一窗

自定义QT窗口部件外观之QStyle

自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. QStyle 类的使用 1.      准备必要的背景图片.在你想添加自定义风格的工程目录下新建一个文件夹“images”,将背景图片等放入文件夹“images”. 2.      点击Qt Creator的“文件”->“新建文件或工程”->模板选择“Qt”,再选择Qt资源文件->点击“选择”

QT 全屏显示子窗口

QT 中全屏显示子窗口的方法 QT 中窗口部件 QWidget 成员函数 showFullScreen();是用于将窗口部件全屏显示 但是他只对窗口模式的部件有用.子窗口的特征是 Qt::SubWindow不是独立的窗 口.因此对其调用 showFullScreen无效.通过对子窗口调用setWindowFlags Qt: :Dialog或 setWindowFlagsQt::Window将其设为窗口模式后即可 调用 showFullScreen();进行全屏显示了. 相对于子窗口的全屏显示方法

基于人体部件检测子的行人检测

基于人体部件检测子的行人检测 edgelet feature body parts human detection Jointly likelihood function 读"B.Wu, R. Nevatia. Detection of Multiple,Partially Occluded Humans in a Single Image by Bayesian Combination of Edgelet Part Detectors[C], ICCV,2005." 笔记 论文主要

Vue.js中传值给子部件及触发动作的问题

最近研究一个用vue.js做的程序并修改增加功能.其中用到传值给子部件等问题. template中有个子部件: <template> ...... <child-form  v-if="flag=1" ></child-form> 要传值给它,方法是: 1. 本template中定义一个data: data() { return { flag:0, someId:"" } } 2. 子部件中定义一个props: props: [

NX二次开发-遍历当前part所有component,把装配子部件设置成工作部件

1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_disp.h> 5 #include <uf_modl.h> 6 #include <uf_part.h> 7 #include <uf_obj.h> 8 #include <uf_assem.h> 9 #include <uf_ui.h> 10 #include <string.h> 11 #include &l

QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透

qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透 窗口置顶qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)kde 里是 KWindowSystem::setState(winId(), NET::KeepAbove)这样的置顶窗口不会处于全屏窗口的上方,如果需要真正的置顶,setWindowFlags(Qt::X11BypassWindowManagerHint) 可无视这个规则,但这样不会出现任务栏等,kimt

Qt窗口及控件-窗口Close()自动释放

在进行一个四窗口项目,当第四个窗口显示结果后,若重新开始则close()结果页面后new第一个窗口 发现不断的重新开始会导致内存占用越来越多 Qt窗口在Close()指令后调用CloseEven(),最后判断是否关闭 若关闭,则Hide()窗口,并不是真正的释放内存.若不关闭则不作任何操作 此时给窗口增加如下设置: setAttribute(Qt::WA_DeleteOnClose); 可实现窗口在Close()后自动释放内存

ArcGis 10.1 多部件至单部件、面转线、面转点、线转面

绍了Arcgis中 多部件至单部件.面转线.面转点.线转面的应用.多部件至单部件: 点击学习 点击学习系统教程