QVBoxLayout的使用

QVBoxLayout的使用#include<QApplication>#include<QPushButton>#include<QWidget>#include<QMenuBar>#include<QStatusBar>#include<QVBoxLayout>#include<QTextEdit>#include&amp

大家好,又见面了,我是你们的朋友全栈君。

#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <QMenuBar>
#include <QStatusBar>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QLabel>

class HMainWindow:public QWidget
{
 
 
public:
    HMainWindow(QWidget * parent =0)
        :QWidget(parent, Qt::Window), m_menuBar(0), m_statusBar(0), m_central(0)
    {
 
 
        m_vbox = new QVBoxLayout(this);
        m_vbox->setContentsMargins(0,0,0,0);
        m_vbox->setSpacing(0);

        menuBar();
        statusBar();
        setCentralWidget(new QTextEdit);

        m_menuBar->addMenu("&File");
        m_menuBar->addMenu("&Help");

        m_statusBar->addWidget(new QLabel("Hello!!"));
        m_statusBar->addPermanentWidget(new QLabel("2018-6-9"));

      setLayout(m_vbox);


    }
    void setCentralWidget(QWidget * w)
    {
 
 
        if (!m_central) {
 
 
            m_central = w;
            m_vbox->insertWidget(0, w, 1);
        }
    }

    QMenuBar * menuBar()
    {
 
 
        if (!m_menuBar) {
 
 
            m_menuBar = new QMenuBar(this);
            m_vbox->setMenuBar(m_menuBar);
        }
        return m_menuBar;
    }

    QStatusBar * statusBar()
    {
 
 
        if (!m_statusBar) {
 
 
            m_statusBar = new QStatusBar(this);
            m_vbox->addWidget(m_statusBar);
        }
        return m_statusBar;
    }

private:
    QMenuBar * m_menuBar;
    QStatusBar * m_statusBar;
    QWidget * m_central;
    QVBoxLayout * m_vbox;
};



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

    HMainWindow w;
    w.show();

    return a.exec();
}

QVBoxLayout的使用

我们用这个来模拟一个QMainWindow,这个类很简单:

HMainWindow()

构造函数。创建了一个layout(用来放置菜单栏、状态栏、中心窗体);传递给基类QWidget一个Qt::Window标记,当然,对我们这个例子这个东西有没有无所谓。

menuBar()

第一次调用它时,会生成一个QMenuBar,并加入layout

statusBar()

同上,生成状态栏并加入layout

setCentralWidget()

除状态栏、菜单栏外的区域,总要放个东西吧?



和 QMainWindow比起来,我们这个HMainWindow实在是太简易了。因为QMainWindow所使用的QMainWindowLayout(对,有这么一个东西,是个私有类) 比 QVBoxLayout复杂太多了。

不过呢,思想是一样的。一旦理解了这个,也就掌握 QMainWindow 的那点小把戏了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149970.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号