zoukankan      html  css  js  c++  java
  • 读Qt Demo——Basic Layouts Example

    此例程主要展示用代码方式创建控件并用Layout管理类对其进行布局;

    例程来自Qt5.2,如过是默认安装,代码位于:C:QtQt5.2.05.2.0mingw48_32exampleswidgetslayoutsasiclayouts

    涉及类:QDialog QPushbotton QGroupBox QLabel QLineEdit QComboBox QTextEdit QHBoxLayout QVBoxLayout QFormLayout QGridLayout QMenu QMenuBar

    image

    main.cpp

    #include <QApplication>
    
    #include "dialog.h"
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        Dialog dialog;
        dialog.show();
    
        return app.exec();
    }

    dialog.h

    #ifndef DIALOG_H
    #define DIALOG_H
    
    #include <QDialog>
    
    class QAction;
    class QDialogButtonBox;
    class QGroupBox;
    class QLabel;
    class QLineEdit;
    class QMenu;
    class QMenuBar;
    class QPushButton;
    class QTextEdit;
    
    class Dialog : public QDialog
    {
        Q_OBJECT
    
    public:
        Dialog();
    
    private:
        void createMenu();
        void createHorizontalGroupBox();
        void createGridGroupBox();
        void createFormGroupBox();
    
        enum { NumGridRows = 3, NumButtons = 4 };
    
        QMenuBar *menuBar;
        QGroupBox *horizontalGroupBox;
        QGroupBox *gridGroupBox;
        QGroupBox *formGroupBox;
        QTextEdit *smallEditor;
        QTextEdit *bigEditor;
        QLabel *labels[NumGridRows];
        QLineEdit *lineEdits[NumGridRows];
        QPushButton *buttons[NumButtons];
        QDialogButtonBox *buttonBox;
    
        QMenu *fileMenu;
        QAction *exitAction;
    };
    
    #endif // DIALOG_H

    dialog.cpp

    #include <QtWidgets>
    
    #include "dialog.h"
    
    Dialog::Dialog()
    {
        createMenu();              //创键菜单
        createHorizontalGroupBox();//创建第一组控件
        createGridGroupBox();      //创建第二组控件
        createFormGroupBox();      //创建第三组控件
    
        bigEditor = new QTextEdit; //创建一个独立的文本编辑框
        bigEditor->setPlainText(tr("This widget takes up all the remaining space "
                                   "in the top-level layout."));
    
                                   //创建对话框按钮组
        buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
                                         | QDialogButtonBox::Cancel);
    
    
        connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));  //连接按钮信号
        connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
    
        QVBoxLayout *mainLayout = new QVBoxLayout;  //创建垂直布局对象
        mainLayout->setMenuBar(menuBar);            //加入菜单栏
        mainLayout->addWidget(horizontalGroupBox);  //加入第一组控件
        mainLayout->addWidget(gridGroupBox);        //加入第二组控件
        mainLayout->addWidget(formGroupBox);        //加入第三组控件
        mainLayout->addWidget(bigEditor);           //加入文本编辑框
        mainLayout->addWidget(buttonBox);           //加入按钮
        setLayout(mainLayout);                      //布局加入app对象
    
        setWindowTitle(tr("Basic Layouts"));        //设置窗口标题
    }
    
    //创建菜单栏
    void Dialog::createMenu()
    {
        menuBar = new QMenuBar; //Dialog类没有菜单栏,所以创建一个
    
        fileMenu = new QMenu(tr("&File"), this); //创建一个菜单
        exitAction = fileMenu->addAction(tr("E&xit"));//添加一个菜单选项
        menuBar->addMenu(fileMenu); //菜单加入菜单栏里
    
        connect(exitAction, SIGNAL(triggered()), this, SLOT(accept()));//连接菜单信号
    }
    
    //加入第一组控件
    void Dialog::createHorizontalGroupBox()
    {
        horizontalGroupBox = new QGroupBox(tr("Horizontal layout"));  //创建组控件
        QHBoxLayout *layout = new QHBoxLayout;                        //创建水平布局对象
    
        for (int i = 0; i < NumButtons; ++i) {                        //创建按钮
            buttons[i] = new QPushButton(tr("Button %1").arg(i + 1));
            layout->addWidget(buttons[i]);                            //加入布局
        }
        horizontalGroupBox->setLayout(layout);                        //将布局好的按钮添加套组控件里
    }
    
    //加入第二组控件
    void Dialog::createGridGroupBox()
    {
        gridGroupBox = new QGroupBox(tr("Grid layout"));              //创建组控件
        QGridLayout *layout = new QGridLayout;                        //创建网格布局对象
    
        for (int i = 0; i < NumGridRows; ++i) {
            labels[i] = new QLabel(tr("Line %1:").arg(i + 1));        //创建标签控件
            lineEdits[i] = new QLineEdit;                             //创建行编辑框控件
            layout->addWidget(labels[i], i + 1, 0);                   //将建标签控件放在i+1行,0列位置
            layout->addWidget(lineEdits[i], i + 1, 1);                //将建标编辑框控件放在i+1行,1列位置
        }
    
        smallEditor = new QTextEdit;                                  //创建一个文本编辑控件
        smallEditor->setPlainText(tr("This widget takes up about two thirds of the "
                                     "grid layout."));
        layout->addWidget(smallEditor, 0, 2, 4, 1); //将文本编辑控件放在0行,2列位置,行跨度为4行,列跨读为1列
    
        layout->setColumnStretch(1, 10);//将第1列的控件(行编辑框控件)拉伸系数为10
        layout->setColumnStretch(2, 20);//将第2列的控件(文本编辑控件)拉伸系数为20
        gridGroupBox->setLayout(layout);
    }
    
    //加入第三组控件
    void Dialog::createFormGroupBox()
    {
        formGroupBox = new QGroupBox(tr("Form layout"));//创建组控件
        QFormLayout *layout = new QFormLayout;          //创建表格式布局对象
        layout->addRow(new QLabel(tr("Line 1:")), new QLineEdit); //添加第一个标签和行编辑器
        layout->addRow(new QLabel(tr("Line 2, long text:")), new QComboBox);//添加第二个标签和行编辑器
        layout->addRow(new QLabel(tr("Line 3:")), new QSpinBox);//添加第三个标签和行编辑器
        formGroupBox->setLayout(layout);
    }
  • 相关阅读:
    PVS 7.6 部署教程
    PHP下载远程图片的3个方法
    [Xcode 实际操作]二、视图与手势-(2)UIView视图的层次关系
    [Swift]检查API可用性
    [Xcode 实际操作]二、视图与手势-(1)UIView视图的基本使用
    [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal
    [Swift]forEach详解
    [Swift]LeetCode937. 重新排列日志文件 | Reorder Log Files
    [Swift]LeetCode940. 不同的子序列 II | Distinct Subsequences II
    [Swift]LeetCode939. 最小面积矩形 | Minimum Area Rectangle
  • 原文地址:https://www.cnblogs.com/worldsing/p/3529542.html
Copyright © 2011-2022 走看看