Qt系列04 布局管理

本节介绍Qt常用布局管理,QSplitter类、QDockWidget类和QStackedWidget类。

QSplitter类

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

int main(int argc, char *argv[]) {
  QApplication a(argc, argv);
  QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0);

  QSplitter *splitterLeft = new QSplitter(Qt::Vertical, splitterMain);
  QLineEdit *lineEditRight = new QLineEdit("Right LineEdit", splitterMain);

  QSplitter *splitterUp = new QSplitter(Qt::Horizontal, splitterLeft);
  QSplitter *splitterDown = new QSplitter(Qt::Horizontal, splitterLeft);

  QLineEdit *lineEditUp = new QLineEdit("Up LineEdit", splitterUp);
  QLineEdit *lineEditDown = new QLineEdit("Down LineEdit", splitterDown);

  splitterMain->show();

  //    Widget w;
  //    w.show();

  return a.exec();
}

编译,运行结果

QDockWidget类

#include "dockwindow.h"
#include <QDockWidget>
#include <QTextEdit>

DockWindow::DockWindow(QWidget *parent) : QMainWindow(parent) {
  setWindowTitle(tr("Dock Window"));
  QTextEdit *te = new QTextEdit(this);
  te->setText(tr("Main Text Edit"));
  te->setAlignment(Qt::AlignCenter);
  setCentralWidget(te);

  QDockWidget *dock1 = new QDockWidget(tr("Dock Widget 1"), this);
  dock1->setFeatures(QDockWidget::DockWidgetMovable);
  dock1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
  QTextEdit *te1 = new QTextEdit();
  te1->setText(tr("Text Edit 1, This Text Edit Widget is Movable!"));
  dock1->setWidget(te1);
  addDockWidget(Qt::RightDockWidgetArea, dock1);

  QDockWidget *dock2 = new QDockWidget(tr("Dock Widget 2"), this);
  dock2->setFeatures(QDockWidget::DockWidgetClosable |
                     QDockWidget::DockWidgetFloatable);
  QTextEdit *te2 = new QTextEdit();
  te2->setText(
      tr("Text Edit 2, This Text Edit Widget is Closable and Floatable!"));
  dock2->setWidget(te2);
  addDockWidget(Qt::RightDockWidgetArea, dock2);

  QDockWidget *dock3 = new QDockWidget(tr("Dock Widget 3"), this);
  dock3->setFeatures(QDockWidget::AllDockWidgetFeatures);
  QTextEdit *te3 = new QTextEdit();
  te3->setText(tr("Text Edit 3, ALL Dock Widget Features!"));
  dock3->setWidget(te3);
  addDockWidget(Qt::RightDockWidgetArea, dock3);
}

编译,运行

QStackedWidget类

#include "stackdlg.h"
#include <QDialog>
#include <QLabel>
#include <QLayout>
#include <QListWidget>
#include <QStackedWidget>
#include <QWidget>

StackDlg::StackDlg(QWidget *parent) : QDialog(parent) {
  setWindowTitle(tr("StackedWidget"));
  list = new QListWidget(this);
  list->insertItem(0, tr("Window 1"));
  list->insertItem(1, tr("Window 2"));
  list->insertItem(2, tr("Window 3"));

  label1 = new QLabel(tr("Window Test 1"));
  label2 = new QLabel(tr("Window Test 2"));
  label3 = new QLabel(tr("Window Test 3"));

  stack = new QStackedWidget(this);
  stack->addWidget(label1);
  stack->addWidget(label2);
  stack->addWidget(label3);

  QHBoxLayout *mainLayout = new QHBoxLayout(this);
  mainLayout->setMargin(5);
  mainLayout->setSpacing(5);
  mainLayout->addWidget(list);
  mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
  mainLayout->setStretchFactor(list, 1);
  mainLayout->setStretchFactor(stack, 3);

  connect(list, SIGNAL(currentRowChanged(int)), stack,
          SLOT(setCurrentIndex(int)));
}

编译,运行结果

原文地址:https://www.cnblogs.com/tangjicheng/p/9062277.html

时间: 2024-11-23 23:21:58

Qt系列04 布局管理的相关文章

Qt学习四 - 布局管理器

开发界面程序,一定会涉及到布局的问题.我们需要让控件显示在理想中的位置,可以直接设置控件的坐标和宽高.但是这样带来一个问题,当用户改变窗口大小时,例如点击最大化按钮或者拖拽窗口边缘,控件是不会改变的(包括控件的坐标和宽高).因为在窗口改变时,你没有告诉程序是否更新控件以及如何更新.如果需要让控件自动更新,那么就要自己来写一些函数来相应这些变化.针对这种情况,Qt提供了一种机制 - 布局,来解决这个问题(大部分用于开发界面程序的语言或者框架,都会提供类似的机制).只需要将控件放入某一种布局,当位置

Android学习系列(二)布局管理器之线性布局及其自定义实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39643669 LinearLayout是Android控件中的线性布局控件,它包含的子控件将以横向(HORIZONTAL)或竖向(VERTICAL)的方式排列,按照相对位置来排列所有的子控件及引用的布局容器.超过边界时,某些控件将缺失或消失.因此一个垂直列表的每一行只会有一个控件或者是引用的布局容器. 一.LinearLayout线性布局的相关属性说明: android:orientat

Qt垂直/水平布局管理器(QBoxLayout,QHBoxLayout, QVBoxLayout)

1.解释 QBoxLayout:可以在水平方向或垂直方向上排列控件,由QHBoxLayout.QVBoxLayout所继承. QHBoxLayout:水平布局,在水平方向上排列控件. QVBoxLayout:垂直布局,在垂直方向上排列控件. 同时我们注意到水平布局.垂直布局除了构造时的方向(LeftToRight.TopToBottom)不同外,其它均相同. 2.示例代码 2.1QHBoxLayout, QVBoxLayout实现 1 #include "widget.h" 2 #in

SAP接口编程 之 JCo3.0系列(04) : 会话管理

在SAP接口编程之 NCo3.0系列(06) : 会话管理 这篇文章中,对会话管理的相关知识点已经说得很详细了,请参考.现在用JCo3.0来实现. 1. JCoContext 如果SAP中多个函数需要在一个session中运行,需要JCoContext来提供保证.如果在同一个线程中,大体模式这样: JCoContext.begin(sapDestination); fm1.execute(sapDestination); fm2.execute(sapDestination); JCoConte

Qt之自定义布局管理器(QCardLayout)

简述 手动布局另一种方法是通过继承QLayout类编写自己的布局管理器. 下面我们详细来举一个例子-QCardLayout.它由同名的Java布局管理器启发而来.也被称之为卡片布局,每个项目偏移QLayout::spacing(). 简述 定义 实现 效果 源码 定义 编写自己的布局,必须定义如下: 一种存储布局处理项目的数据结构,每个项目都是一个QLayoutItem,本例使用QList. addItem() 如何添加项目布局. setGeometry() 如何控制布局. sizeHint()

Qt之自定义布局管理器(QFlowLayout)

简述 QFlowLayout,顾名思义-流布局,实现了处理不同窗口大小的布局.根据应用窗口的宽度来进行控件放置的变化. 具体实现要求不再赘述,请参考前两节内容. 简述 实现 效果 源码 实现 QFlowLayout主要采用QLayout和QWidgetItem实现,而窗口使用了QWidget和QPushButton. 效果 源码 QFlowLayout.h #ifndef QFLOWLAYOUT_H #define QFLOWLAYOUT_H #include <QLayout> #inclu

Qt之自定义布局管理器(QBorderLayout)

简述 QBorderLayout,顾名思义-边框布局,实现了排列子控件包围中央区域的布局. 具体实现要求不再赘述,请参考前几节内容. 简述 实现 效果 源码 使用 实现 QBorderLayout主要采用QLayout和QWidgetItem实现,而窗口使用了QWidget,中央窗体使用QTextBrowser,四周以QLabel排列. 效果 源码 QBorderLayout.h #ifndef QBORDERLAYOUT_H #define QBORDERLAYOUT_H #include <

Qt 布局管理器

在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是我们不得不关注的一个重点了. 我们进入正题,今天主要和大家分享一下Qt方面关于布局管理器的使用: 一.基本概念   Qt 提供了几种在窗口部件上管理子窗口部件的基本方式.一共有3 种方法用于管理窗体上子窗口部件的布局:绝对位置法.人工布局法和布局管理器法.相比于使用固定尺寸和位置,布局提供了功能强大

QT开发(二十一)——QT布局管理器

QT开发(二十一)--QT布局管理器 一.布局管理器简介 QT中使用绝对定位的布局方式无法自适应窗口的变化. QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理,能够自动排列窗口中的界面组件,窗口大小变化后自动更新界面组件的大小. QLayout是QT中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器. 布局管理器不是界面组件,而是界面组件的定位策略. 任意容器类型的组件都可以指定布局管理器. 同一个布局管理器管理中的组件拥有相同的父组件,在设置布局