欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt不用布局类挂载(增加)界面控件和显示界面控件的基本原理和示例代码(setGeometry()、QPushButton)

程序员文章站 2022-05-28 11:52:47
...

很久以前学QT时,经常按照例子打了,发现显示不了控件。这是因为图形控件都是从QWidget继承而来,而QWidget是一个基本界面,要显示的话,需要调用其槽函数show()。当我们不用布局类时,用这种方式可以直接显示界面控件。

优点:用控件自身的槽函数show()显示控件、用setGeometry()显示控件位置,这种方式的优点是可以任意布局,并且两个控件可以重叠,能够做出许多复杂效果。

其原理是:界面控件类本身是继承QWidget的,挂载控件界面本质是在指定界面的某个位置显示这些控件类。这就相当于我们弹出一个widget一样,只是我们界面控件是直接嵌入到某个QWidget(也就是以该QWidget为父类)界面里面。

其中,Windows界面可以分为模态对话框和非模态对话框,QWidget可以显示这两种模式,具体的原理和显示方法和看我这篇博客:https://blog.csdn.net/naibozhuan3744/article/details/92767271

本文主要总结这种用法跟布局类用法不同点(两种方法也可以混合使用)。

a1 当一个QWidget界面用了布局类时,则该QWidget界面可以用这种方式挂载另外的控件,混合布局

a2 当在一个QWidget界面添加一个控件界面时,该控件界面的父类需要设置为QWidget界面,并且要手动设置该控件界面的大小和调用槽函数show,才会显示出来;

a3 当控件界面的父类为空指针nullprt,则调用该控件界面,设置初始大小,并且调用槽函数show,显示时,初始坐标是在整个屏幕左上角,而不是QWidget界面内。

 

一、下面是一个具体的实例

实例代码主要创建两个按钮,然后第一个按钮的父类为QWidget控件,第二个按钮的父类为空nullprt;然后结果显示第一个按钮在QWidget界面内,第二个按钮在整个屏幕左上角。

1.1新建一个widget工程,勾选UI选型,然后分别在widget.h、widget.cpp、main.cpp中添加如下代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

    void setupUI();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

 

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QPushButton>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    setupUI();
}

Widget::~Widget()
{
    delete ui;
    qDebug()<<"执行了析构函数";
}

void Widget::setupUI()
{
    QPushButton *button1=new QPushButton("父控件为Widget内",this);
    button1->setFixedSize(150,50);
    button1->setGeometry(0,0,0,0);
    button1->show();

    QPushButton *button2=new QPushButton("父控件为null内,则屏幕左上角为起始点");
    button2->setFixedSize(300,150);
    button2->setGeometry(0,0,0,0);
    button2->show();
}

 

main.cpp

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

1.2程序运行结果如下所示

Qt不用布局类挂载(增加)界面控件和显示界面控件的基本原理和示例代码(setGeometry()、QPushButton)

 

参考内容:

https://blog.csdn.net/zgrjkflmkyc/article/details/8644226(参考:不用布局类添加控件)

https://blog.csdn.net/caomin1hao/article/details/80388760(参考:QWidget增加了布局后,子类可以不用布局挂载控件)