Перейти к содержимому

Mainwindow что это за окно на рабочем столе

  • автор:

Window растянуть на весь рабочий стол

Как WPF Window растянуть на весь рабочий стол в не зависимости от количества мониторов и их расширений ?

Отслеживать
задан 20 авг 2018 в 16:09
1,581 2 2 золотых знака 22 22 серебряных знака 42 42 бронзовых знака

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Используйте свойство WindowState и перечисление WindowState.
Вот пример для вашей ситуации, когда нужно растянуть на весь рабочий стол окно:
Пример через Code behind:

public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); WindowState = WindowState.Maximized; >> 

Пример через разметку самого окна:

Отслеживать
ответ дан 20 авг 2018 в 19:07
746 5 5 серебряных знаков 19 19 бронзовых знаков
В этом случае оно занимает только основной монитор
20 авг 2018 в 20:29
Как быть если нужно расширить на все подключенные мониторы ?
20 авг 2018 в 20:29

Как бы другие мониторы на то и ДРУГИЕ мониторы, что они идут как ДРУГИЕ мониторы, считайте значит ширину всех мониторов и присваивайте ее своему окну

21 авг 2018 в 10:01

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Глава 3. Создание главного окна приложения

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

Рисунок 3.1. Приложение — электронная таблица.

Главное окно — это своего рода каркас, на который «натягивается» весь пользовательский интерфейс приложения. Здесь мы рассмотрим пример создания главного окна электронной таблицы. Внешний вид нашего будущего приложения приводится на рисунке 3.1. В этом приложении мы будем использовать диалоги «Find», «Go-to-Cell» и «Sort», которые были созданы нами в Главе 2. Внутри большинства приложений с графическим интерфейсом «прячется» код, который обеспечивает основные функциональные возможности программы, например, работа с файлами или обработка данных, представляемых пользовательским интерфейсом. В Главе 4 мы покажем — как реализуется такого рода функциональность, на примере нашей электронной таблицы.

3.1. Создание класса-наследника от QMainWindow.

Главное окно любого приложения — это класс-наследник QMainWindow. Большинство приемов, используемых при создания диалогов и о которых мы говорили в Главе 2, вполне применимы и при создании главного окна приложения. Главное окно может быть создано в Qt Designer , но мы все будем делать «вручную», чтобы продемонстрировать процесс создания главного окна во всех деталях. Если вы предпочитаете визуальное проектирование — прочитайте главу «Creating a Main Window Application» в справочном руководстве к Qt Designer . Исходные тексты главного окна будут располагаться в двух файлах: mainwindow.cpp и mainwindow.cpp. Начнем с файла заголовка:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include class QAction; class QLabel; class FindDialog; class Spreadsheet; class MainWindow : public QMainWindow < Q_OBJECT public: MainWindow(QWidget *parent = 0, const char *name = 0); protected: void closeEvent(QCloseEvent *event); void contextMenuEvent(QContextMenuEvent *event);

Это определение класса MainWindow -- наследника QMainWindow. Оно содержит макрос Q_OBJECT, поскольку реализует свои собственные сигналы и слоты.

Функция closeEvent(), в классе QWidget, объявлена как виртуальная. Она автоматически вызывается перед завершением приложения. Мы перекрываем ее в MainWindow для того, чтобы иметь возможность спросить у пользователя -- желает ли он сохранить произведенные изменения, а также для того, чтобы сохранить на диск пользовательские настройки. Аналогично, функция contextMenuEvent() вызывается, когда пользователь щелкает правой кнопкой мыши по виджету. Мы перекрываем ее в MainWindow для того, чтобы вывести контекстное меню.

private slots: void newFile(); void open(); bool save(); bool saveAs(); void find(); void goToCell(); void sort(); void about();

Реализация действий некоторых пунктов меню, таких как File|New и Help|About, выполнена в виде приватных слотов MainWindow. Большинство слотов имеют тип void, но слоты save() и saveAs возвращают результат типа bool. Значение, возвращаемое слотом, игнорируется в случае вызова по сигналу, но когда слот вызывается как обычная функция, то мы получаем от него возвращаемое значение, которое можем использовать для своих нужд.

void updateCellIndicators(); void spreadsheetModified(); void openRecentFile(int param); private: void createActions(); void createMenus(); void createToolBars(); void createStatusBar(); void readSettings(); void writeSettings(); bool maybeSave(); void loadFile(const QString &fileName); void saveFile(const QString &fileName); void setCurrentFile(const QString &fileName); void updateRecentFileItems(); QString strippedName(const QString &fullFileName);

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

Spreadsheet *spreadsheet; FindDialog *findDialog; QLabel *locationLabel; QLabel *formulaLabel; QLabel *modLabel; QStringList recentFiles; QString curFile; QString fileFilters; bool modified; enum < MaxRecentFiles = 5 >; int recentFileIds[MaxRecentFiles]; QPopupMenu *fileMenu; QPopupMenu *editMenu; QPopupMenu *selectSubMenu; QPopupMenu *toolsMenu; QPopupMenu *optionsMenu; QPopupMenu *helpMenu; QToolBar *fileToolBar; QToolBar *editToolBar; QAction *newAct; QAction *openAct; QAction *saveAct; . QAction *aboutAct; QAction *aboutQtAct; >; #endif

Кроме функций, класс главного окна имеет ряд скрытых переменных. Все они будут описаны по мере необходимости.

Теперь перейдем к реализации:

#include #include #include #include #include #include #include #include #include #include #include #include "cell.h" #include "finddialog.h" #include "gotocelldialog.h" #include "mainwindow.h" #include "sortdialog.h" #include "spreadsheet.h"

Здесь подключаются заголовки всех классов Qt, которые используются в приложении, а также заголовок класса главного окна и ряд других заголовочных файлов, таких как finddialog.h, gotocelldialog.h и sortdialog.h, которые мы создали в предыдущей главе.

MainWindow::MainWindow(QWidget *parent, const char *name) : QMainWindow(parent, name)

Конструктор начинается с создания виджета Spreadsheet, который будет центральным виджетом главного окна. Центральный виджет занимает все пространство, находящееся между панелью инструментов (toolbar) и строкой состояния (statusbar). Класс Spreadsheet является потомком класса QTable и добавляет некоторые свойства, характерные для электронных таблиц. Среди них можно назвать поддержку формул, которая будет реализована в Главе 4.

Рисунок 3.2. Раскладка виджетов в главном окне.

  • Сохранение изображений в файлы и загрузка из файлов, в процессе работы приложения.
  • Включение изображений формата XPM в исходный код.
  • Механизм "коллекции изображений" ("image collection").

В данном примере мы будем использовать механизм "коллекции изображений", поскольку работать с ним намного проще, чем загружать файлы в процессе исполнения. К тому же он может взаимодействовать со всеми, поддерживаемыми библиотекой, графическими форматами. Все изображения мы будем хранить в каталоге images. Чтобы создать файл на языке C++ (он будет создан утилитой uic), который будет хранить наши изображения, добавим следующие строки в файл .pro:

IMAGES = images/icon.png \ images/new.png \ images/open.png \ . images/find.png \ images/gotocell.png

Изображения будут помещены в исполняемый файл приложения и могут быть получены вызовом QPixmap::fromMimeSource(). Преимущество такого способа организации хранения изображений заключается в том, что они никогда не потеряются, поскольку находятся внутри исполняемого файла.

Если главное окно создается в Qt Designer , то вы можете использовать визуальные средства, предоставляемые построителем, для вставки изображений в коллекцию.

Примечания

Если вы проживаете в стране, чье законодательство признает патенты на программное обеспечение и где компания Unisys имеет зарегистрированный патент на алгоритм сжатия LZW, то Unisys может потребовать от вас приобрести лицензию на использование GIF. По этой причине, поддержка формата GIF в Qt по-умолчанию запрещена. Мы полагаем, что срок действия этого патента по всему миру истечет к концу 2004 года.

Пред. В начало След.
Встроенные виджеты и классы диалогов. На уровень выше Создание меню и панелей инструментов.

MainWindow - Главное окно¶

Используйте готовый объект axipy.app.mainwindow .

Methods:

Добавляет окно просмотра данных.

Добавляет панель в главное окно приложения.

Добавляет слой в текущей карте.

Добавляет слой с запросом на помещение на текущую карту или в новую.

Открывает слой в новой карте.

Читает рабочее пространство из файла.

Возвращает Qt5 объект окна.

Удаляет существующую панель у главного окна приложения.

Сохраняет рабочее пространство в файл.

Создает и показывает главное окно программы.

Показывает окно для локального файла html или если это web страница, запускает браузер по ассоциации

Attributes:

Хранилище объектов приложения.

Корректность состояния главного окна.

Добавляет окно просмотра данных.

view ( View ) – окно просмотра данных.

При создании окон просмотра данных axipy.gui.ViewManager.create_mapview() или axipy.gui.ViewManager.create_tableview() они автоматически добавляются в главное окно программы.

Тип результата

add_dock_widget ( dock_widget , area , icon = None ) ¶

Добавляет панель в главное окно приложения. При успешном добавлении возвращает True. Если же данная панель уже присутствует, то команда игнорируется и возвращается False. Элементы управления, которые требуется разместить на панели, создаются в дополнительном окне, а уже это окно, в свою очередь, устанавливается для панели (см. пример ниже).

  • dock_widget ( QDockWidget ) – Пользовательская созданная панель.
  • area ( DockWidgetArea ) – Расположение.
  • icon ( Optional [ QIcon ]) – Иконка для отображения в списке всех доступных панелей.
from PySide2.QtWidgets import QDockWidget, QWidget, QPushButton from PySide2.QtCore import Qt dock = QDockWidget('Заголовок') widget = QWidget() layout = QVBoxLayout() button = QPushButton("Кнопка") button.clicked.connect(lambda: print('Реакция на кнопку')) layout.addWidget(button) layout.addStretch() widget.setLayout(layout) dock.setWidget(widget) app.mainwindow.add_dock_widget(dock, Qt.RightDockWidgetArea, QIcon('filename.png')) 

Тип результата

Добавляет слой в текущей карте.

Добавляет слой с запросом на помещение на текущую карту или в новую.

Открывает слой в новой карте.

Хранилище объектов приложения.

Это то же хранилище, которое отображается в панели «Открытые данные».

При открытии объектов данных axipy.da.ProviderManager.openfile() они автоматически попадают в каталог.

Тип результата

Корректность состояния главного окна.

Читает рабочее пространство из файла.

fileName ( str ) – Наименование входного файла.

Возвращает Qt5 объект окна.

Удаляет существующую панель у главного окна приложения.

Сохраняет рабочее пространство в файл.

fileName ( str ) – Наименование выходного файла.

Создает и показывает главное окно программы.

show_html_url ( url , caption ) ¶

Показывает окно для локального файла html или если это web страница, запускает браузер по ассоциации

  • url ( QUrl ) – Ссылка на файл html или адрес страницы.
  • caption ( Optional [ str ]) – Заголовок окна

Куда девается значок программы в панели задач?

Вот какой вопрос. Создал программу с двумя окнами. При работе программы открывается первое окно, затем если нажать на кнопку на этом окне, то открывается другое окно. Вроде ничего необычного. Первая проблема: после того, как открылось второе окно пропадает значок программы на панели задач. Как сделать чтобы он сохранился? И как раз из-за этой проблемы, второе окно не сворачивается нормально. Тупо просто в угол рабочего стола уходит. В чем дело? Например вот такой код: Первое окно:

from PyQt5 import QtCore, QtGui, QtWidgets class Window_1(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(300, 146) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(40, 30, 221, 41)) self.pushButton.setObjectName("pushButton") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "Нажми")) 

Второе окно:

from PyQt5 import QtCore, QtGui, QtWidgets class Window_2(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(290, 143) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(80, 30, 171, 71)) self.label.setObjectName("label") MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", "Тут что-то написано")) 

И главное которое запускает:

import sys, os from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5 import QtWidgets, QtGui from Window1 import Window_1 from Window2 import Window_2 class Window(QMainWindow): def __init__(self, parent=None): super(Window, self).__init__(parent) self.Win = Window_1() self.Win.setupUi(self) self.Win.pushButton.clicked.connect(self.check) def check(self): des = Window2(parent=self) self.hide() class Window2(QMainWindow): def __init__(self, parent=None): super(Window2, self).__init__(parent) self.Win_2 = Window_2() self.Win_2.setupUi(self) self.show() if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_()) 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *