1. 程式人生 > >Qt系列04 布局管理

Qt系列04 布局管理

slot src mov AI enter qdoc cin gin wid

本節介紹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)));
}

編譯,運行結果

技術分享圖片

Qt系列04 布局管理