QT基础篇(3)QT5布局管理

发布时间:2024年01月11日

简单介绍一下布局管理的使用方法

1.分割窗口QSplitter类

QSplitter类是Qt框架提供的一个窗口部件,用于在一个父窗口中分割成多个子窗口,并提供拖动分割条的功能。下面是使用QSplitter类分割窗口的示例代码:

from PyQt5.QtWidgets import QApplication, QMainWindow, QSplitter, QTextEdit

if __name__ == '__main__':
    app = QApplication([])
    mainWindow = QMainWindow()
    
    # 创建一个QSplitter对象作为主窗口的中心部件
    splitter = QSplitter(mainWindow)
    
    # 创建两个子窗口,用QTextEdit类实现
    leftWindow = QTextEdit()
    rightWindow = QTextEdit()
    
    # 将子窗口添加到QSplitter中
    splitter.addWidget(leftWindow)
    splitter.addWidget(rightWindow)
    
    # 设置QSplitter的分割方向为水平方向
    splitter.setOrientation(Qt.Horizontal)
    
    # 将QSplitter设置为主窗口的中心部件
    mainWindow.setCentralWidget(splitter)
    
    mainWindow.show()
    app.exec()

上述代码创建了一个主窗口,其中包含一个QSplitter对象作为中心部件,然后在QSplitter中添加了两个子窗口QTextEdit。通过设置QSplitter的分割方向为水平方向,可以实现水平分割窗口的效果。最后,将QSplitter设置为主窗口的中心部件,通过调用mainWindow.show()方法显示主窗口,并通过app.exec()启动应用程序的事件循环。

运行上述代码,将会显示一个分割成两个子窗口的窗口,并可以通过拖动分割条来调整子窗口的尺寸。

2..停靠窗口QDockWidget类

QDockWidget类是Qt框架中用于创建停靠窗口的类。停靠窗口是可以与主窗口进行交互,并可以在主窗口的边缘停靠或浮动的窗口。

要使用QDockWidget类,首先需要创建一个QMainWindow对象作为主窗口。然后通过调用QMainWindowaddDockWidget()方法将QDockWidget添加到主窗口中。

以下是一个简单的示例代码:

#include <QMainWindow>
#include <QDockWidget>

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

    QMainWindow mainWindow;
    
    QDockWidget dockWidget("Dock Widget", &mainWindow);
    mainWindow.addDockWidget(Qt::LeftDockWidgetArea, &dockWidget);
    
    mainWindow.show();

    return app.exec();
}

在上面的示例代码中,我们首先创建了一个QMainWindow对象mainWindow作为主窗口。然后创建了一个QDockWidget对象dockWidget,并设置其标题为"Dock Widget",父对象设置为mainWindow

最后,通过调用mainWindowaddDockWidget()方法,将dockWidget添加到主窗口的左侧停靠区域(Qt::LeftDockWidgetArea)。

最后调用mainWindowshow()方法显示主窗口,并通过app.exec()启动Qt应用的事件循环。

通过这个简单的示例,可以创建一个带有停靠窗口的主窗口。可以通过调整addDockWidget()方法的参数来设置停靠窗口的位置和方式。

3.堆栈窗体QStackedWidget类

QStackedWidget类是Qt框架中的一个窗体控件,用于实现堆栈窗体效果。它可以容纳多个子窗体,并且只显示其中一个子窗体,其他子窗体则被隐藏。

QStackedWidget类的常用方法包括:

  1. void addWidget(QWidget *widget):添加一个子窗体。

  2. void insertWidget(int index, QWidget *widget):在指定位置插入一个子窗体。

  3. void removeWidget(QWidget *widget):移除一个子窗体。

  4. void setCurrentIndex(int index):设置当前显示的子窗体。

  5. int currentIndex() const:获取当前显示的子窗体的索引。

堆栈窗体可以通过setCurrentIndex方法来切换显示的子窗体,也可以通过currentIndex方法获取当前显示的子窗体的索引。

使用堆栈窗体可以实现一些常见的界面切换效果,比如登录界面和主界面之间的切换,向导式的界面流程等。

4.基本布局(QLayout)

在Qt中,基本布局指的是将窗口或窗口部件中的其他控件进行排列的布局方式。常见的基本布局包括水平布局(QHBoxLayout)和垂直布局(QVBoxLayout),还有网格布局(QGridLayout),表单布局(QFormLayout)等。

水平布局(QHBoxLayout):水平布局将控件水平排列,即控件从左到右依次排列。

QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(widget1);
layout->addWidget(widget2);
layout->addWidget(widget3);
setLayout(layout);

垂直布局(QVBoxLayout):垂直布局将控件垂直排列,即控件从上到下依次排列。

QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(widget1);
layout->addWidget(widget2);
layout->addWidget(widget3);
setLayout(layout);

网格布局(QGridLayout):网格布局将控件按照网格的形式进行排列,可以分成多行多列的网格。

QGridLayout *layout = new QGridLayout();
layout->addWidget(widget1, 0, 0); // 在第0行0列添加控件widget1
layout->addWidget(widget2, 0, 1); // 在第0行1列添加控件widget2
layout->addWidget(widget3, 1, 0); // 在第1行0列添加控件widget3
setLayout(layout);

表单布局(QFormLayout):表单布局将控件按照键值对的形式进行排列,通常用于表单的输入输出。

QFormLayout *layout = new QFormLayout();
layout->addRow("Label 1", widget1); // 添加一行"label 1: widget1"
layout->addRow("Label 2", widget2); // 添加一行"label 2: widget2"
layout->addRow("Label 3", widget3); // 添加一行"label 3: widget3"
setLayout(layout);

以上是常见的几种基本布局方式,根据实际需求选择合适的布局方式来排列控件。布局还可以嵌套使用,可以在一个布局中添加另一个布局来实现更复杂的界面布局。

文章来源:https://blog.csdn.net/m0_57260797/article/details/135535932
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。