Qt-窗口部件

本文详细介绍了Qt库中的窗口部件,包括基础窗口部件QWidget、窗口类型、窗口几何布局、对话框QDialog以及各种对话框的使用,如颜色对话框、文件对话框、字体对话框等。还探讨了如何创建和管理模态与非模态对话框,以及信号和槽机制在窗口部件间交互的应用。此外,提到了其他窗口部件如QLabel、QFrame、QLCDNumber和QAbstractButton的使用。
摘要由CSDN通过智能技术生成

窗口部件

  1. 基础窗口部件QWidget

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

  1. 窗口与子部件:
#include<QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //新建QWidget类对象,默认parent参数是0,所有它是个窗口
    QWidget *widget = new QWidget();
    //设置窗口标题
    widget->setWindowTitle(QObject::tr("我是窗口"));
    //新建QLabel对象,默认参数是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();
    int ret=a.exec();
    delete label;
    delete widget;
    return ret;
}

程序中定义了一个QWidget类对象的指针widget和两个Qlabel对象指针label和label2,其中label没有父窗口,而label2在widget中,widget是其父窗口。

注意:这里使用new操作符为label2分配了空间,但是并没有使用delete进行释放,这是因为在Qt中销毁父对象的时候会自动销毁子对象。

 

  1. 窗口类型

QWidget的构造函数有两个参数:QWidget * parent = 0和Qt::WindowFlags f = 0,前面的parent指父窗口部件,默认值为0,表明没有父窗口;而后面的f参数是Qt::WindowFlags类型的,是Qt::WindowType枚举类型的值或组合。 Qt::WindowType包括了很多类型,下面演示其中的Qt:Dialog和Qt::Splash-Screen,更改程序中新建对象的那两行代码:

QWidget *widget = new QWidget(0,Qt::Dialog);

QLabel *label=new QLabel(0,Qt::SplashScreen);

可以看到,更改窗口类型后窗口的样式发生了改变,一个是对话框类型,一个是欢迎窗口类型。 而窗口标志Qt::WindowFlags可以是多个窗口类型枚举值进行位或操作,下面再次更改那两行代码:

QWidget *widget = new QWidget(0,Qt::Dialog|Qt::FramelessWindowHint);

QLabel *label=new QLabel(0,Qt::SplashScreen|Qt::WindowStaysOnTopHint);

Qt::FramelessWindowHint用来产生一个没有边框的窗口,而Qt::WindowStaysOnTopHint用来使该窗口停留在所有其他窗口上面。

 

  1. 窗口几何布局

这里的函数分为两类:

包含框架: x(),y(),frameGeometry(),pos()和move()等函数;

不包含框架: geometry(),width(),height(),rect()和size()等函数。

使用qDebug()函数:

程序调试过程中常用的是qDebug()函数,它可以将调试信息直接输出到控制台。

#include <QApplication>
#include <QWidget>
#include <QDebug>

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

    QWidget widget;
    widget.resize(400, 300);       // 设置窗口大小
    widget.move(200, 100);         // 设置窗口位置
    widget.show();
    int x = widget.x();
    qDebug("x: %d", x);            // 输出x的值
    int y = widget.y();
    qDebug("y: %d", y);
    QRect geometry = widget.geometry();
    QRect frame = widget.frameGeometry();
    qDebug() << "geometry: " << geometry << "frame: " << frame;

    return a.exec();
}

这里使用了两种输出方法,一种是直接将字符串当作参数传给qDebug()函数,例如上面使用这种方法输出x和y的值。 另一种方法是使用输出流的方式一次输出多个值,它们的类型可以不同,如程序中输出geometry和frame的值。

在“return a.exec();”一行代码前添加如下代码:

    qDebug() << "geometry: " << geometry << "frame: " << frame;

qDebug()<<"pos:"<<widget.pos()<<endl<<"rect:"<<widget.rect()

       <<endl<<"size:"<<widget.size()<<endl<<"width:"

      <<widget.width()<<endl<<"height:"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WUYANGEZRA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值