Главное окно приложенияОбзор классов главного окнаЭти классы предоставляют все, что вам нужно для типичного главного окна современного приложения, как само главное окно, так и меню и панели инструментов, строку состояния и прочее.
Классы главного окна в Qt 4Qt 4 предоставляет следующие классы для управления главным окном и связанными с ним компонентами пользовательского интерфейса:
Примеры кодаПрямое использование QMainWindow. Вообще, мы создаем подклассы QMainWindow и устанавливаем меню, панели инструментов и встроенные виджеты внутри конструктора QMainWindow. Чтобы добавить панель меню к главному окну, мы просто создаем меню и добавляем его в панель меню главного окна. Обратите внимание, что функция QMainWindow::menuBar() автоматически создает панель меню при первом вызове. Вы также можете вызвать QMainWindow::setMenuBar() для того, чтобы использовать собственное меню в главном окне. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ... newAct = new QAction(tr("&New"), this); newAct->setShortcuts(QKeySequence::New); newAct->setStatusTip(tr("Create a new file")); connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); openAct = new QAction(tr("&Open..."), this); openAct->setShortcuts(QKeySequence::Open); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); ... Как только действия созданы, их можно связать с компонентами главного окна. Для начала добавляем их к всплывающим меню: fileMenu = menuBar()->addMenu(tr("&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); Вышеприведенная диаграмма демонстрирует, как изменятся области встраиваемых виджетов после выполнения данного кода. Обратите внимание, что левая и правая область встраиваемых виджетов займет верхние и нижние углы главного окна. После того, как созданы все компоненты главного окна, приступаем к созданию центрального виджета с помощью следующего кода: QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget); Центральный виджет может быть любым из подклассов QWidget. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |