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

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

(Различия между версиями)
Перейти к: навигация, поиск
 
Строка 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 />=
Qt 4 предоставляет новый набор классов основного окна, которые превосходят классы основного окна в Qt 3 обеспечивая большую эффективность при сохранении удобства в использовании.
Qt 4 предоставляет новый набор классов основного окна, которые превосходят классы основного окна в Qt 3 обеспечивая большую эффективность при сохранении удобства в использовании.
 +
*[[#overview-of-the-main-window-classes | Обзор классов главного окна]]
 +
*[[#the-main-window-classes | Классы главного окна]]
 +
*[[#example-code | Примеры кода]]
 +
*[[#what-s-changed-since-qt-3 | Что изменилось по сравнению с Qt 3?]]
 +
**[[#new-functionality | Новый функционал]]
 +
**[[#independent-qdockwidget-and-qtoolbar-classes | Независимые классы QDockWidget и QToolBar]]
 +
**[[#code-change-examples | Изменения в примерах]]
 +
 +
<div id="overview-of-the-main-window-classes"></div>
==Обзор классов главного окна==
==Обзор классов главного окна==
Классы связанные с главным окном были полностью переработаны для того, чтобы удовлетворить множество требований и разрешить множество проблем с которыми столкнулись наши клиетны и внутренние разработчики. Цель данного перепроектирования - обеспечить более последовательную и эффективную структуру управления главным окном.
Классы связанные с главным окном были полностью переработаны для того, чтобы удовлетворить множество требований и разрешить множество проблем с которыми столкнулись наши клиетны и внутренние разработчики. Цель данного перепроектирования - обеспечить более последовательную и эффективную структуру управления главным окном.
-
 
+
<div id="the-main-window-classes"></div>
==Классы главного окна==
==Классы главного окна==
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 на объединение действий привел к удобному сотрудничеству панелей инструметов с горячими клавишами клавиатуры и меню.
 +
<div id="example-code"></div>
==Примеры кода==
==Примеры кода==
-
Прямое использование [[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)
  {
  {
     ...
     ...
-
     newAct = new QAction(tr(&quot;&amp;New&quot;), this);
+
     newAct = new QAction(tr("&amp;New"), this);
-
     newAct-&gt;setShortcut(tr(&quot;Ctrl+N&quot;));
+
     newAct->setShortcut(tr("Ctrl+N"));
-
     newAct-&gt;setStatusTip(tr(&quot;Create a new file&quot;));
+
     newAct->setStatusTip(tr("Create a new file"));
     connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
     connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
-
     openAct = new QAction(tr(&quot;&amp;Open...&quot;), this);
+
     openAct = new QAction(tr("&amp;Open..."), this);
-
     openAct-&gt;setShortcut(tr(&quot;Ctrl+O&quot;));
+
     openAct->setShortcut(tr("Ctrl+O"));
-
     openAct-&gt;setStatusTip(tr(&quot;Open an existing file&quot;));
+
     openAct->setStatusTip(tr("Open an existing file"));
     connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     ...</source>  
     ...</source>  
Как только действия созданы, их можно связать с компонентами главного окна. Для начала добавляем их к выпадающим меню:
Как только действия созданы, их можно связать с компонентами главного окна. Для начала добавляем их к выпадающим меню:
-
<source lang="cpp-qt">    fileMenu = menuBar()-&gt;addMenu(tr(&quot;&amp;File&quot;));
+
<source lang="cpp-qt">    fileMenu = menuBar()->addMenu(tr("&amp;File"));
-
     fileMenu-&gt;addAction(newAct);
+
     fileMenu->addAction(newAct);
-
     fileMenu-&gt;addAction(openAct);
+
     fileMenu->addAction(openAct);
     ...
     ...
-
     fileMenu-&gt;addSeparator();
+
     fileMenu->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]] также поддерживает эту функцию облегчая повторное использование действий в различных частях главного окна. Это избавляет от ненужного повторения кода.
Мы создаем дочернее по отношению к главному окну меню и добавляем в него нужные действия:
Мы создаем дочернее по отношению к главному окну меню и добавляем в него нужные действия:
-
<source lang="cpp-qt">    fileToolBar = addToolBar(tr(&quot;File&quot;));
+
<source lang="cpp-qt">    fileToolBar = addToolBar(tr("File"));
-
     fileToolBar-&gt;addAction(newAct);
+
     fileToolBar->addAction(newAct);
-
     fileToolBar-&gt;addAction(openAct);
+
     fileToolBar->addAction(openAct);
-
     ...</source> <source lang="cpp-qt">    fileToolbar-&gt;setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
+
     ...</source> <source lang="cpp-qt">    fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
     addToolBar(Qt::TopToolBarArea, fileToolbar);</source>  
     addToolBar(Qt::TopToolBarArea, fileToolbar);</source>  
В данном примере расположение панели инструментов ограничего верхней и нижней частями главного окна и первоначальное положение уставновлено как верхняя. Мы можем видеть, что действия, определенные как, <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("Table of Contents"), this);
-
     contentsWindow-&gt;setAllowedAreas(Qt::LeftDockWidgetArea
+
     contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
                                   | Qt::RightDockWidgetArea);
                                   | Qt::RightDockWidgetArea);
     addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);
     addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);
     headingList = new QListWidget(contentsWindow);
     headingList = new QListWidget(contentsWindow);
-
     contentsWindow-&gt;setWidget(headingList);</source>  
+
     contentsWindow->setWidget(headingList);</source>  
В данном примере месторасположение встроенного виджета ограничено левой и правой областью встраиваиваемых виджетов и первоначально определено как левая.
В данном примере месторасположение встроенного виджета ограничено левой и правой областью встраиваиваемых виджетов и первоначально определено как левая.
-
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: Строка 82:
<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]].
-
 
+
<div id="what-s-changed-since-qt-3"></div>
==Что изменилось по сравнению с 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 используются слегка различными способами.
Классы встроенных виджетов и панели инструметров сейчас разделены на независимые классы. (и не только)
Классы встроенных виджетов и панели инструметров сейчас разделены на независимые классы. (и не только)
(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.)
(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.)
-
 
+
<div id="new-functionality"></div>
===Новый функционал===
===Новый функционал===
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 <tt>setAnimated()</tt>.
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 <tt>setAnimated()</tt>.
Строка 87: Строка 98:
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)
-
 
+
<div id="independent-qdockwidget-and-qtoolbar-classes"></div>
===Независимые классы 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: Строка 107:
Диаграмма приведенная выше показывает компоновку главного окна, которое содержит панели инструметов и встроенные виджеты. Каждая из угловых областей может использоваться любой из смежных областей встроенных виджетов позволяя задавать точное расположение виджетов.
Диаграмма приведенная выше показывает компоновку главного окна, которое содержит панели инструметов и встроенные виджеты. Каждая из угловых областей может использоваться любой из смежных областей встроенных виджетов позволяя задавать точное расположение виджетов.
-
Панели инструметров и встроенные виджеты являются дочерними окнами по отношению к главному окну. Больше нет необходимости удочерять их главным окном. Вместо этого компоновщики используются для управления расположением панелей инструметов и состыковкой виджетов. В результате этого старый класс [[Qt:Документация_4.3.2/porting4#qdockarea | QDockArea]] больше не требуется в Qt 4.
+
Панели инструметров и встроенные виджеты являются дочерними окнами по отношению к главному окну. Больше нет необходимости удочерять их главным окном. Вместо этого компоновщики используются для управления расположением панелей инструметов и состыковкой виджетов. В результате этого старый класс [[Qt:Документация 4.3.2/porting4#qdockarea | QDockArea]] больше не требуется в Qt 4.
-
 
+
<div id="code-change-examples"></div>
===Изменения в примерах===
===Изменения в примерах===
-
[[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:
<source lang="cpp-qt"> QPopupMenu *fileMenu = new QPopupMenu(this);
<source lang="cpp-qt"> QPopupMenu *fileMenu = new QPopupMenu(this);
-
  openAction-&gt;addTo(fileMenu);
+
  openAction->addTo(fileMenu);
-
  saveAction-&gt;addTo(fileMenu);
+
  saveAction->addTo(fileMenu);
  ...
  ...
-
  menuBar()-&gt;insertItem(tr(&quot;&amp;File&quot;), fileMenu);</source>  
+
  menuBar()->insertItem(tr("&amp;File"), fileMenu);</source>  
Qt 4:
Qt 4:
-
<source lang="cpp-qt"> QMenu *fileMenu = menuBar()-&gt;addMenu(tr(&quot;&amp;File&quot;));
+
<source lang="cpp-qt"> QMenu *fileMenu = menuBar()->addMenu(tr("&amp;File"));
-
  fileMenu-&gt;addAction(openAction);
+
  fileMenu->addAction(openAction);
-
  fileMenu-&gt;addAction(saveAction);
+
  fileMenu->addAction(saveAction);
  ...</source>  
  ...</source>  
Панели инструментов строятся по тем-же самым принципам, что и меню, и обеспечивают новое, более последовательное поведение:
Панели инструментов строятся по тем-же самым принципам, что и меню, и обеспечивают новое, более последовательное поведение:
Qt 3:
Qt 3:
-
<source lang="cpp-qt"> QToolBar *fileTools = new QToolBar(this, &quot;file toolbar&quot;);
+
<source lang="cpp-qt"> QToolBar *fileTools = new QToolBar(this, "file toolbar");
-
  openAction-&gt;addTo(fileTools);
+
  openAction->addTo(fileTools);
-
  saveAction-&gt;addTo(fileTools);
+
  saveAction->addTo(fileTools);
  ...</source>  
  ...</source>  
Qt 4:
Qt 4:
-
<source lang="cpp-qt"> QToolBar *fileTools = addToolBar(tr(&quot;File Tool Bar&quot;));
+
<source lang="cpp-qt"> QToolBar *fileTools = addToolBar(tr("File Tool Bar"));
-
  fileTools-&gt;addAction(openAction);
+
  fileTools->addAction(openAction);
-
  fileTools-&gt;addAction(saveAction);
+
  fileTools->addAction(saveAction);
  ...</source>  
  ...</source>  
-
Поведение встраиваемых виджетов теперь настраивается через функции-члены [[Qt:Документация_4.3.2/qdockwidget | QDockWidget]]. Для примера сравните старый и новый способы создания встраиваемого виджета, располагающегося в левой области встраиваемых виджетов главного окна.
+
Поведение встраиваемых виджетов теперь настраивается через функции-члены [[Qt:Документация 4.3.2/qdockwidget | QDockWidget]]. Для примера сравните старый и новый способы создания встраиваемого виджета, располагающегося в левой области встраиваемых виджетов главного окна.
In Qt 3:
In Qt 3:
<source lang="cpp-qt"> QDockWidget *dockWidget = new QDockWidget(this);
<source lang="cpp-qt"> QDockWidget *dockWidget = new QDockWidget(this);
-
  mainWin-&gt;moveDockWidget(dockWidget, Qt::DockLeft);</source>  
+
  mainWin->moveDockWidget(dockWidget, Qt::DockLeft);</source>  
In Qt 4:
In Qt 4:
<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->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]]
 

Текущая версия на 10:37, 6 ноября 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("&amp;New"), this);
     newAct->setShortcut(tr("Ctrl+N"));
     newAct->setStatusTip(tr("Create a new file"));
     connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
 
     openAct = new QAction(tr("&amp;Open..."), this);
     openAct->setShortcut(tr("Ctrl+O"));
     openAct->setStatusTip(tr("Open an existing file"));
     connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     ...

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

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

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

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

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

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

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

     contentsWindow = new QDockWidget(tr("Table of Contents"), this);
     contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
                                   | Qt::RightDockWidgetArea);
     addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);
 
     headingList = new QListWidget(contentsWindow);
     contentsWindow->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->addTo(fileMenu);
 saveAction->addTo(fileMenu);
 ...
 menuBar()->insertItem(tr("&amp;File"), fileMenu);

Qt 4:

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

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

Qt 3:

 QToolBar *fileTools = new QToolBar(this, "file toolbar");
 openAction->addTo(fileTools);
 saveAction->addTo(fileTools);
 ...

Qt 4:

 QToolBar *fileTools = addToolBar(tr("File Tool Bar"));
 fileTools->addAction(openAction);
 fileTools->addAction(saveAction);
 ...

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

In Qt 3:

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

In Qt 4:

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

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


Copyright © 2007 Trolltech Trademarks
Qt 4.3.2