Qt:Документация 4.3.2/qt4-mainwindow

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{Qt4.3.2_header}} [Предыдущая: Классы работы с текстом scribe [ Начало ] [Далее: [[Qt:4.3.2/q...)
Строка 1: Строка 1:
{{Qt4.3.2_header}}
{{Qt4.3.2_header}}
-
[Предыдущая: [[Qt:4.3.2/qt4-scribe | Классы работы с текстом scribe]] [ [[Qt:4.3.2/qt4-intro | Начало]] ] [Далее: [[Qt:4.3.2/qt4-designer | Новый Qt Designer]]]
+
[Предыдущая: [[Qt:Документация_4.3.2/qt4-scribe | Классы работы с текстом scribe]] [ [[Qt:Документация_4.3.2/qt4-intro | Начало]] ] [Далее: [[Qt:Документация_4.3.2/qt4-designer | Новый Qt Designer]]]
=Классы главного окна в Qt 4<br />=
=Классы главного окна в Qt 4<br />=
Строка 11: Строка 11:
Qt 4 предоставляет следующие классы для управления главным окном и связанными с ним компонентами пользовательского интерфейса:
Qt 4 предоставляет следующие классы для управления главным окном и связанными с ним компонентами пользовательского интерфейса:
-
*[[Qt:4.3.2/qmainwindow | QMainWindow]] остается центральным классом вокруг которого может быть построено приложение. Интерфейс данного класса был упрощен и многие функциональные возможности перенесены в классы [[Qt:4.3.2/qdockwidget | QDockWidget]] и [[Qt:4.3.2/qtoolbar | QToolBar]].
+
*[[Qt:Документация_4.3.2/qmainwindow | QMainWindow]] остается центральным классом вокруг которого может быть построено приложение. Интерфейс данного класса был упрощен и многие функциональные возможности перенесены в классы [[Qt:Документация_4.3.2/qdockwidget | QDockWidget]] и [[Qt:Документация_4.3.2/qtoolbar | QToolBar]].
-
*[[Qt:4.3.2/qdockwidget | QDockWidget]] предоставляет виджет, который может быть использован для создания перемещаемых панелей инструметов или окон помощи. Встоенный виджет хранит сведения о себе и может быть перемещен, закрыт или использован как внешнее окно.
+
*[[Qt:Документация_4.3.2/qdockwidget | QDockWidget]] предоставляет виджет, который может быть использован для создания перемещаемых панелей инструметов или окон помощи. Встоенный виджет хранит сведения о себе и может быть перемещен, закрыт или использован как внешнее окно.
-
*[[Qt:4.3.2/qtoolbar | QToolBar]] представляет собой родовой виджет панели инструметов и может содержать множество различных виджетов связанных с выполнением каких-либо действий, таких как кнопки, выпадающие меню, выпадающие списки и счетчики. Упор в Qt 4 на объединение действий привел к удобному сотрудничеству панелей инструметов с горячими клавишами клавиатуры и меню.
+
*[[Qt:Документация_4.3.2/qtoolbar | QToolBar]] представляет собой родовой виджет панели инструметов и может содержать множество различных виджетов связанных с выполнением каких-либо действий, таких как кнопки, выпадающие меню, выпадающие списки и счетчики. Упор в Qt 4 на объединение действий привел к удобному сотрудничеству панелей инструметов с горячими клавишами клавиатуры и меню.
==Примеры кода==
==Примеры кода==
-
Прямое использование [[Qt:4.3.2/qmainwindow | QMainWindow]]. Вообще мы создаем подклассы [[Qt:4.3.2/qmainwindow | QMainWindow]] и основываем меню, панели инструметов и встроенные виджеты внутри конструктора [[Qt:4.3.2/qmainwindow | QMainWindow]].
+
Прямое использование [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]]. Вообще мы создаем подклассы [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]] и основываем меню, панели инструметов и встроенные виджеты внутри конструктора [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]].
-
Чтобы добавить панель меню к главному окну, мы просто создаем меню и добавляем его в панель меню главного окна. Обратите внимание, что функция [[Qt:4.3.2/qmainwindow#menuBar | QMainWindow::menuBar]]() автоматически создает панель меню при первом вызове. Вы также можете вызвать [[Qt:4.3.2/qmainwindow#setMenuBar | QMainWindow::setMenuBar]]() для того, чтобы использовать собственное меню в главном окне.
+
Чтобы добавить панель меню к главному окну, мы просто создаем меню и добавляем его в панель меню главного окна. Обратите внимание, что функция [[Qt:Документация_4.3.2/qmainwindow#menuBar | QMainWindow::menuBar]]() автоматически создает панель меню при первом вызове. Вы также можете вызвать [[Qt:Документация_4.3.2/qmainwindow#setMenuBar | QMainWindow::setMenuBar]]() для того, чтобы использовать собственное меню в главном окне.
<source lang="cpp-qt"> MainWindow::MainWindow(QWidget *parent)
<source lang="cpp-qt"> MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
     : QMainWindow(parent)
Строка 39: Строка 39:
     fileMenu-&gt;addSeparator();
     fileMenu-&gt;addSeparator();
     ...</source>  
     ...</source>  
-
Классы [[Qt:4.3.2/qtoolbar | QToolBar]] и [[Qt:4.3.2/qmenu | QMenu]] используют систему действий Qt для поддержания последовательного API. В вышеприведенном коде некоторые действия были добавлены в меню с помощью функции [[Qt:4.3.2/qmenu#addAction | QMenu::addAction]](). [[Qt:4.3.2/qtoolbar | QToolBar]] также поддерживает эту функцию облегчая повторное использование действий в различных частях главного окна. Это избавляет от ненужного повторения кода.
+
Классы [[Qt:Документация_4.3.2/qtoolbar | QToolBar]] и [[Qt:Документация_4.3.2/qmenu | QMenu]] используют систему действий Qt для поддержания последовательного API. В вышеприведенном коде некоторые действия были добавлены в меню с помощью функции [[Qt:Документация_4.3.2/qmenu#addAction | QMenu::addAction]](). [[Qt:Документация_4.3.2/qtoolbar | QToolBar]] также поддерживает эту функцию облегчая повторное использование действий в различных частях главного окна. Это избавляет от ненужного повторения кода.
Мы создаем дочернее по отношению к главному окну меню и добавляем в него нужные действия:
Мы создаем дочернее по отношению к главному окну меню и добавляем в него нужные действия:
Строка 49: Строка 49:
В данном примере расположение панели инструментов ограничего верхней и нижней частями главного окна и первоначальное положение уставновлено как верхняя. Мы можем видеть, что действия, определенные как, <tt>newAct</tt> и <tt>openAct</tt> будут отображены и в меню и на панели инструментов.
В данном примере расположение панели инструментов ограничего верхней и нижней частями главного окна и первоначальное положение уставновлено как верхняя. Мы можем видеть, что действия, определенные как, <tt>newAct</tt> и <tt>openAct</tt> будут отображены и в меню и на панели инструментов.
-
[[Qt:4.3.2/qdockwidget | QDockWidget]] используется подобно [[Qt:4.3.2/qtoolbar | QToolBar]]. Мы создаем встроенный виджет как дочерний по отношению к главному окну и добавляем в него виджеты дочерние по отношению к встроенному вижету:
+
[[Qt:Документация_4.3.2/qdockwidget | QDockWidget]] используется подобно [[Qt:Документация_4.3.2/qtoolbar | QToolBar]]. Мы создаем встроенный виджет как дочерний по отношению к главному окну и добавляем в него виджеты дочерние по отношению к встроенному вижету:
<source lang="cpp-qt">    contentsWindow = new QDockWidget(tr(&quot;Table of Contents&quot;), this);
<source lang="cpp-qt">    contentsWindow = new QDockWidget(tr(&quot;Table of Contents&quot;), this);
     contentsWindow-&gt;setAllowedAreas(Qt::LeftDockWidgetArea
     contentsWindow-&gt;setAllowedAreas(Qt::LeftDockWidgetArea
Строка 59: Строка 59:
В данном примере месторасположение встроенного виджета ограничено левой и правой областью встраиваиваемых виджетов и первоначально определено как левая.
В данном примере месторасположение встроенного виджета ограничено левой и правой областью встраиваиваемых виджетов и первоначально определено как левая.
-
API [[Qt:4.3.2/qmainwindow | QMainWindow]] позволяет программисту настраивать какие встраиваемые виджеты какой угол занимают и как они состыковываются. Если требуется, положение по умолчанию может быть изменено с помощью функции [[Qt:4.3.2/qmainwindow#setCorner | QMainWindow::setCorner]]():
+
API [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]] позволяет программисту настраивать какие встраиваемые виджеты какой угол занимают и как они состыковываются. Если требуется, положение по умолчанию может быть изменено с помощью функции [[Qt:Документация_4.3.2/qmainwindow#setCorner | QMainWindow::setCorner]]():
<source lang="cpp-qt"> setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
<source lang="cpp-qt"> setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
  setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
  setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
Строка 71: Строка 71:
<source lang="cpp-qt"> QWidget *centralWidget = new QWidget(this);
<source lang="cpp-qt"> QWidget *centralWidget = new QWidget(this);
  setCentralWidget(centralWidget);</source>  
  setCentralWidget(centralWidget);</source>  
-
Центральный виджет может быть любым из подклассов [[Qt:4.3.2/qwidget | QWidget]].
+
Центральный виджет может быть любым из подклассов [[Qt:Документация_4.3.2/qwidget | QWidget]].
==Что изменилось по сравнению с Qt 3?==
==Что изменилось по сравнению с Qt 3?==
В Qt 4 в классы главного окна добавлен новый функционал, преимущественно для встроенных виджетов и панели инструметров. Изменения были сделаны только в структуре.
В Qt 4 в классы главного окна добавлен новый функционал, преимущественно для встроенных виджетов и панели инструметров. Изменения были сделаны только в структуре.
-
Хотя класс [[Qt:4.3.2/qmainwindow | QMainWindow]] в Qt 3 обеспечивал поддержку панелей инструментов, встраиваемый виджетов и прочих страндартных компонентов пользовательского интерфейса, это делалось с помощью большого количества функций-членов [[Qt:4.3.2/qmainwindow | QMainWindow]]. В Qt 4 класс [[Qt:4.3.2/qmainwindow | QMainWindow]] многие из функций управления в [[Qt:4.3.2/qdockwidget | QDockWidget]] и [[Qt:4.3.2/qtoolbar | QToolBar]]. В результате эти классы в Qt 4 используются слегка различными способами.
+
Хотя класс [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]] в Qt 3 обеспечивал поддержку панелей инструментов, встраиваемый виджетов и прочих страндартных компонентов пользовательского интерфейса, это делалось с помощью большого количества функций-членов [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]]. В Qt 4 класс [[Qt:Документация_4.3.2/qmainwindow | QMainWindow]] многие из функций управления в [[Qt:Документация_4.3.2/qdockwidget | QDockWidget]] и [[Qt:Документация_4.3.2/qtoolbar | QToolBar]]. В результате эти классы в Qt 4 используются слегка различными способами.
Классы встроенных виджетов и панели инструметров сейчас разделены на независимые классы. (и не только)
Классы встроенных виджетов и панели инструметров сейчас разделены на независимые классы. (и не только)
Строка 87: Строка 87:
By default, dock widgets are added to the dock areas in a single row. By setting nesting enabled with <tt>setDockNestingEnabled()</tt>, the widgets can be added both vertically and horizontally.
By default, dock widgets are added to the dock areas in a single row. By setting nesting enabled with <tt>setDockNestingEnabled()</tt>, the widgets can be added both vertically and horizontally.
-
Two dock widgets can occupy the same space in a dock area. The user can then choose which widget that is visible with a tab bar that is located below the widgets. The [[Qt:4.3.2/qmainwindow#tabifyDockWidget | QMainWindow::tabifyDockWidget]]() joins two tab widgets in such a tabbed dock area. (revise the entire paragraph)
+
Two dock widgets can occupy the same space in a dock area. The user can then choose which widget that is visible with a tab bar that is located below the widgets. The [[Qt:Документация_4.3.2/qmainwindow#tabifyDockWidget | QMainWindow::tabifyDockWidget]]() joins two tab widgets in such a tabbed dock area. (revise the entire paragraph)
===Независимые классы QDockWidget и QToolBar===
===Независимые классы QDockWidget и QToolBar===
-
Функциональные возможности панели инструметов и встроенного окна обеспечиваются двумя независимыми классами: [[Qt:4.3.2/qtoolbar | QToolBar]] и [[Qt:4.3.2/qdockwidget | QDockWidget]]. Панели инструметов и встроенные виджеты располагаются в отдельных областях. Подобное поведение отличается от поведения в Qt 3 где [[Qt:4.3.2/qtoolbar | QToolBar]] наследует функциональные возможности [[Qt:4.3.2/qdockwidget | QDockWidget]] и где компоненты обоих типов располагаются в одних и тех-же областях. В результате мы получили более последовательное и предсказуемое поведение. Панели инструметов и встроенные виджеты сохраняют обратную связь в то время, как их перемещают в новую позицию.
+
Функциональные возможности панели инструметов и встроенного окна обеспечиваются двумя независимыми классами: [[Qt:Документация_4.3.2/qtoolbar | QToolBar]] и [[Qt:Документация_4.3.2/qdockwidget | QDockWidget]]. Панели инструметов и встроенные виджеты располагаются в отдельных областях. Подобное поведение отличается от поведения в Qt 3 где [[Qt:Документация_4.3.2/qtoolbar | QToolBar]] наследует функциональные возможности [[Qt:Документация_4.3.2/qdockwidget | QDockWidget]] и где компоненты обоих типов располагаются в одних и тех-же областях. В результате мы получили более последовательное и предсказуемое поведение. Панели инструметов и встроенные виджеты сохраняют обратную связь в то время, как их перемещают в новую позицию.
[[Image:mainwindow-docks.png|center]]
[[Image:mainwindow-docks.png|center]]
Строка 96: Строка 96:
Диаграмма приведенная выше показывает компоновку главного окна, которое содержит панели инструметов и встроенные виджеты. Каждая из угловых областей может использоваться любой из смежных областей встроенных виджетов позволяя задавать точное расположение виджетов.
Диаграмма приведенная выше показывает компоновку главного окна, которое содержит панели инструметов и встроенные виджеты. Каждая из угловых областей может использоваться любой из смежных областей встроенных виджетов позволяя задавать точное расположение виджетов.
-
Панели инструметров и встроенные виджеты являются дочерними окнами по отношению к главному окну. Больше нет необходимости удочерять их главным окном. Вместо этого компоновщики используются для управления расположением панелей инструметов и состыковкой виджетов. В результате этого старый класс [[Qt:4.3.2/porting4#qdockarea | QDockArea]] больше не требуется в Qt 4.
+
Панели инструметров и встроенные виджеты являются дочерними окнами по отношению к главному окну. Больше нет необходимости удочерять их главным окном. Вместо этого компоновщики используются для управления расположением панелей инструметов и состыковкой виджетов. В результате этого старый класс [[Qt:Документация_4.3.2/porting4#qdockarea | QDockArea]] больше не требуется в Qt 4.
===Изменения в примерах===
===Изменения в примерах===
-
[[Qt:4.3.2/qmainwindow | QMainWindow]] продолжает поддерживать функцию menuBar(), но меню всегда строится с использованием объектов [[Qt:4.3.2/qaction | QAction]]. Все виды меню построены с использованием общего класса [[Qt:4.3.2/qmenu | QMenu]].
+
[[Qt:Документация_4.3.2/qmainwindow | QMainWindow]] продолжает поддерживать функцию menuBar(), но меню всегда строится с использованием объектов [[Qt:Документация_4.3.2/qaction | QAction]]. Все виды меню построены с использованием общего класса [[Qt:Документация_4.3.2/qmenu | QMenu]].
Qt 3:
Qt 3:
Строка 124: Строка 124:
  fileTools-&gt;addAction(saveAction);
  fileTools-&gt;addAction(saveAction);
  ...</source>  
  ...</source>  
-
Поведение встраиваемых виджетов теперь настраивается через функции-члены [[Qt:4.3.2/qdockwidget | QDockWidget]]. Для примера сравните старый и новый способы создания встраиваемого виджета, располагающегося в левой области встраиваемых виджетов главного окна.
+
Поведение встраиваемых виджетов теперь настраивается через функции-члены [[Qt:Документация_4.3.2/qdockwidget | QDockWidget]]. Для примера сравните старый и новый способы создания встраиваемого виджета, располагающегося в левой области встраиваемых виджетов главного окна.
In Qt 3:
In Qt 3:
Строка 132: Строка 132:
<source lang="cpp-qt"> QDockWidget *dockWidget = new QDockWidget(mainWindow);
<source lang="cpp-qt"> QDockWidget *dockWidget = new QDockWidget(mainWindow);
  mainWindow-&gt;addDockWidget(Qt::LeftDockWidgetArea, dockWidget);</source>  
  mainWindow-&gt;addDockWidget(Qt::LeftDockWidgetArea, dockWidget);</source>  
-
[Предыдущая: [[Qt:4.3.2/qt4-scribe | Классы работы с текстом scribe]] [ [[Qt:4.3.2/qt4-intro | Начало]] ] [Далее: [[Qt:4.3.2/qt4-designer | Новый Qt Designer]]]
+
[Предыдущая: [[Qt:Документация_4.3.2/qt4-scribe | Классы работы с текстом scribe]] [ [[Qt:Документация_4.3.2/qt4-intro | Начало]] ] [Далее: [[Qt:Документация_4.3.2/qt4-designer | Новый Qt Designer]]]
{{Qt4.3.2_footer}}
{{Qt4.3.2_footer}}
[[Категория:Qt]]
[[Категория:Qt]]

Версия 07:00, 30 октября 2008

40px Внимание: Актуальная версия перевода документации находится здесь

__NOTOC__

Image:qt-logo.png

Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Image:trolltech-logo.png

[Предыдущая: Классы работы с текстом scribe [ Начало ] [Далее: Новый Qt Designer]

Содержание

Классы главного окна в Qt 4

Qt 4 предоставляет новый набор классов основного окна, которые превосходят классы основного окна в Qt 3 обеспечивая большую эффективность при сохранении удобства в использовании.

Обзор классов главного окна

Классы связанные с главным окном были полностью переработаны для того, чтобы удовлетворить множество требований и разрешить множество проблем с которыми столкнулись наши клиетны и внутренние разработчики. Цель данного перепроектирования - обеспечить более последовательную и эффективную структуру управления главным окном.

Классы главного окна

Qt 4 предоставляет следующие классы для управления главным окном и связанными с ним компонентами пользовательского интерфейса:

  • QMainWindow остается центральным классом вокруг которого может быть построено приложение. Интерфейс данного класса был упрощен и многие функциональные возможности перенесены в классы QDockWidget и QToolBar.
  • QDockWidget предоставляет виджет, который может быть использован для создания перемещаемых панелей инструметов или окон помощи. Встоенный виджет хранит сведения о себе и может быть перемещен, закрыт или использован как внешнее окно.
  • QToolBar представляет собой родовой виджет панели инструметов и может содержать множество различных виджетов связанных с выполнением каких-либо действий, таких как кнопки, выпадающие меню, выпадающие списки и счетчики. Упор в Qt 4 на объединение действий привел к удобному сотрудничеству панелей инструметов с горячими клавишами клавиатуры и меню.

Примеры кода

Прямое использование QMainWindow. Вообще мы создаем подклассы QMainWindow и основываем меню, панели инструметов и встроенные виджеты внутри конструктора QMainWindow.

Чтобы добавить панель меню к главному окну, мы просто создаем меню и добавляем его в панель меню главного окна. Обратите внимание, что функция QMainWindow::menuBar() автоматически создает панель меню при первом вызове. Вы также можете вызвать QMainWindow::setMenuBar() для того, чтобы использовать собственное меню в главном окне.

 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
 {
     ...
     newAct = new QAction(tr(&quot;&amp;New&quot;), this);
     newAct-&gt;setShortcut(tr(&quot;Ctrl+N&quot;));
     newAct-&gt;setStatusTip(tr(&quot;Create a new file&quot;));
     connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
 
     openAct = new QAction(tr(&quot;&amp;Open...&quot;), this);
     openAct-&gt;setShortcut(tr(&quot;Ctrl+O&quot;));
     openAct-&gt;setStatusTip(tr(&quot;Open an existing file&quot;));
     connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     ...

Как только действия созданы, их можно связать с компонентами главного окна. Для начала добавляем их к выпадающим меню:

     fileMenu = menuBar()-&gt;addMenu(tr(&quot;&amp;File&quot;));
     fileMenu-&gt;addAction(newAct);
     fileMenu-&gt;addAction(openAct);
     ...
     fileMenu-&gt;addSeparator();
     ...

Классы QToolBar и QMenu используют систему действий Qt для поддержания последовательного API. В вышеприведенном коде некоторые действия были добавлены в меню с помощью функции QMenu::addAction(). QToolBar также поддерживает эту функцию облегчая повторное использование действий в различных частях главного окна. Это избавляет от ненужного повторения кода.

Мы создаем дочернее по отношению к главному окну меню и добавляем в него нужные действия:

     fileToolBar = addToolBar(tr(&quot;File&quot;));
     fileToolBar-&gt;addAction(newAct);
     fileToolBar-&gt;addAction(openAct);
     ...
     fileToolbar-&gt;setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
     addToolBar(Qt::TopToolBarArea, fileToolbar);

В данном примере расположение панели инструментов ограничего верхней и нижней частями главного окна и первоначальное положение уставновлено как верхняя. Мы можем видеть, что действия, определенные как, newAct и openAct будут отображены и в меню и на панели инструментов.

QDockWidget используется подобно QToolBar. Мы создаем встроенный виджет как дочерний по отношению к главному окну и добавляем в него виджеты дочерние по отношению к встроенному вижету:

     contentsWindow = new QDockWidget(tr(&quot;Table of Contents&quot;), this);
     contentsWindow-&gt;setAllowedAreas(Qt::LeftDockWidgetArea
                                   | Qt::RightDockWidgetArea);
     addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);
 
     headingList = new QListWidget(contentsWindow);
     contentsWindow-&gt;setWidget(headingList);

В данном примере месторасположение встроенного виджета ограничено левой и правой областью встраиваиваемых виджетов и первоначально определено как левая.

API QMainWindow позволяет программисту настраивать какие встраиваемые виджеты какой угол занимают и как они состыковываются. Если требуется, положение по умолчанию может быть изменено с помощью функции QMainWindow::setCorner():

 setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
 setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
 setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
 setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);

Вышеприведенная диаграмма демонстрирует, как изменятся области встраиваемых виджетов после выполнения данного кода. Обратите внимание, что левая и правая область встраиваемых виджетов займет верхние и нижние углы главного окна.

center

После того, как созданы все компоненты главного окна, приступаем к созданию центрального виджета с помощью следующего кода:

 QWidget *centralWidget = new QWidget(this);
 setCentralWidget(centralWidget);

Центральный виджет может быть любым из подклассов QWidget.

Что изменилось по сравнению с Qt 3?

В Qt 4 в классы главного окна добавлен новый функционал, преимущественно для встроенных виджетов и панели инструметров. Изменения были сделаны только в структуре.

Хотя класс QMainWindow в Qt 3 обеспечивал поддержку панелей инструментов, встраиваемый виджетов и прочих страндартных компонентов пользовательского интерфейса, это делалось с помощью большого количества функций-членов QMainWindow. В Qt 4 класс QMainWindow многие из функций управления в QDockWidget и QToolBar. В результате эти классы в Qt 4 используются слегка различными способами.

Классы встроенных виджетов и панели инструметров сейчас разделены на независимые классы. (и не только)

(It is intended that these changes allow more consistent behavior to be defined and implemented (which? example). In response to feedback from customers, we hope to improve these classes even further.)

Новый функционал

Dock widgets are animated when docking or detaching from a dock area. The dock areas will also adjust their size to show where the dock widget will dock when it hovers over it. This animation can be turned off with setAnimated().

By default, dock widgets are added to the dock areas in a single row. By setting nesting enabled with setDockNestingEnabled(), the widgets can be added both vertically and horizontally.

Two dock widgets can occupy the same space in a dock area. The user can then choose which widget that is visible with a tab bar that is located below the widgets. The QMainWindow::tabifyDockWidget() joins two tab widgets in such a tabbed dock area. (revise the entire paragraph)

Независимые классы QDockWidget и QToolBar

Функциональные возможности панели инструметов и встроенного окна обеспечиваются двумя независимыми классами: QToolBar и QDockWidget. Панели инструметов и встроенные виджеты располагаются в отдельных областях. Подобное поведение отличается от поведения в Qt 3 где QToolBar наследует функциональные возможности QDockWidget и где компоненты обоих типов располагаются в одних и тех-же областях. В результате мы получили более последовательное и предсказуемое поведение. Панели инструметов и встроенные виджеты сохраняют обратную связь в то время, как их перемещают в новую позицию.

center

Диаграмма приведенная выше показывает компоновку главного окна, которое содержит панели инструметов и встроенные виджеты. Каждая из угловых областей может использоваться любой из смежных областей встроенных виджетов позволяя задавать точное расположение виджетов.

Панели инструметров и встроенные виджеты являются дочерними окнами по отношению к главному окну. Больше нет необходимости удочерять их главным окном. Вместо этого компоновщики используются для управления расположением панелей инструметов и состыковкой виджетов. В результате этого старый класс QDockArea больше не требуется в Qt 4.

Изменения в примерах

QMainWindow продолжает поддерживать функцию menuBar(), но меню всегда строится с использованием объектов QAction. Все виды меню построены с использованием общего класса QMenu.

Qt 3:

 QPopupMenu *fileMenu = new QPopupMenu(this);
 openAction-&gt;addTo(fileMenu);
 saveAction-&gt;addTo(fileMenu);
 ...
 menuBar()-&gt;insertItem(tr(&quot;&amp;File&quot;), fileMenu);

Qt 4:

 QMenu *fileMenu = menuBar()-&gt;addMenu(tr(&quot;&amp;File&quot;));
 fileMenu-&gt;addAction(openAction);
 fileMenu-&gt;addAction(saveAction);
 ...

Панели инструментов строятся по тем-же самым принципам, что и меню, и обеспечивают новое, более последовательное поведение:

Qt 3:

 QToolBar *fileTools = new QToolBar(this, &quot;file toolbar&quot;);
 openAction-&gt;addTo(fileTools);
 saveAction-&gt;addTo(fileTools);
 ...

Qt 4:

 QToolBar *fileTools = addToolBar(tr(&quot;File Tool Bar&quot;));
 fileTools-&gt;addAction(openAction);
 fileTools-&gt;addAction(saveAction);
 ...

Поведение встраиваемых виджетов теперь настраивается через функции-члены QDockWidget. Для примера сравните старый и новый способы создания встраиваемого виджета, располагающегося в левой области встраиваемых виджетов главного окна.

In Qt 3:

 QDockWidget *dockWidget = new QDockWidget(this);
 mainWin-&gt;moveDockWidget(dockWidget, Qt::DockLeft);

In Qt 4:

 QDockWidget *dockWidget = new QDockWidget(mainWindow);
 mainWindow-&gt;addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

[Предыдущая: Классы работы с текстом scribe [ Начало ] [Далее: Новый Qt Designer]


Copyright © 2007 Trolltech Trademarks
Qt 4.3.2