QtitanRibbon开发示例:如何将特殊小部件嵌入到应用程序 – BackstageView 中

该示例展示了如何将特殊小部件嵌入到应用程序 – BackstageView 中。

该示例展示了如何将特殊小部件嵌入到应用程序 – BackstageView 中。

BackstageView 是一个具有最大 z 顺序并与整个窗口重叠的小部件。它位于按应用程序中经常使用的菜单主题分组的按钮。

QtitanRibbon开发示例:如何将特殊小部件嵌入到应用程序 - BackstageView 中

功能区/BackstageView/BackstageView.pro

TEMPLATE = appTARGET = "Ribbon_"$$member(TARGET, 0)QTITANDIR = $$quote($$(QTITANDIR))isEmpty(QTITANDIR):QTITANDIR = $$quote($$PWD/../../../)include($$QTITANDIR/src/shared/qtitanribbon.pri)DESTDIR = $$QTITANDIR/binDESTDIR = $$member(DESTDIR, 0)$$QTITAN_LIB_PREFIXDESTDIR = "$$DESTDIR"!debug_and_release|build_pass {    CONFIG(debug, debug|release) {        TARGET = $$member(TARGET, 0)d    }}HEADERS        = mainwindow.h                  backstagepages.hSOURCES        = main.cpp                  mainwindow.cpp                  backstagepages.cppFORMS         = infopage.ui                 savepage.ui                 helppage.ui                 saveemailpage.ui                 savewebpage.ui RESOURCES     = BackstageView.qrcinclude($$PWD/../../shared/aboutdialog.pri)include($$PWD/../../ribbon/shared/DemoRibbonWindow.pri)macx {    CONFIG-=app_bundle}!lessThan(QT_VER_MAJ, 5) {  QT += printsupport}

BackstageView.py

import sys, ossys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../shared")from PySide2 import QtCorefrom PySide2.QtCore import Qt, QPoint, QSettingsfrom PySide2.QtGui import QIcon, QPixmap, QKeySequencefrom PySide2.QtWidgets import (QWidget, QApplication, QAction, QMenu, QListWidget,       QCheckBox, QDockWidget, QGroupBox, QVBoxLayout, QMessageBox, QListWidgetItem)from DemoRibbonWindow import DemoRibbonWindowfrom backstagepages import (RibbonBackstageInfoPage, RibbonBackstageSaveEmailPage,    RibbonBackstageSaveWebPage, RibbonBackstageSavePage, RibbonBackstageAboutPage)from DevMachines import QtitanBasefrom DevMachines.QtitanBase import Qtitan, CommonStylefrom DevMachines.QtitanRibbon import RibbonWorkspace, RibbonBackstageViewimport BackstageView_rcclass MainWindow(DemoRibbonWindow):    def __init__(self):        DemoRibbonWindow.__init__(self)        self.setWindowTitle(self.tr("PyQtitanRibbon Backstage Sample"))        self.setCentralWidget(RibbonWorkspace())        self.createBackstage()        self.createQuickAccessBar()        self.createRibbon()        self.createDockWindows()        self.statusBar()        self.ribbonBar().setTitleBackground(QPixmap(":/res/background.png"))        self.move(QPoint(200, 200))        geom = QApplication.desktop().availableGeometry()        self.resize(2 * geom.width() / 3, 2 * geom.height() / 3)        settings = QSettings(QSettings.UserScope, "Developer Machines")        files = settings.value("recentFileList")        settings.setValue("recentFileList", files)        #emit updateRecentFileActions(files)        self.ribbonBar().systemButton().setToolButtonStyle(Qt.ToolButtonTextOnly)    def createBackstage(self):        iconLogo = QIcon()        iconLogo.addPixmap(QPixmap(":/res/file.png"))        iconLogo.addPixmap(QPixmap(":/res/qtitanlogo32x32.png"))        actionFile = self.ribbonBar().addSystemButton(iconLogo, self.tr("&File"))        actionFile.setToolTip(self.tr("Click here to see everything<br />you can do with your<br />document"))        backstage = RibbonBackstageView(self.ribbonBar())        #connect(backstage, SIGNAL(aboutToShow()), this, SLOT(showBackstage()));        #connect(backstage, SIGNAL(aboutToHide()), this, SLOT(hideBackstage()));        saveFile = backstage.addAction(DemoRibbonWindow.createIcon(DemoRibbonWindow.Image_Save), self.tr("&Save"))        saveFile.setShortcut(self.tr("Ctrl+S"))        saveFile.setToolTip(self.tr("Save"))        saveFile.setStatusTip(self.tr("Save the active document"))        #connect(saveFile, SIGNAL(triggered()), this, SLOT(save()));        saveAsFile = backstage.addAction(DemoRibbonWindow.createIcon(DemoRibbonWindow.Image_SaveAs), self.tr("Save &As"))        saveAsFile.setToolTip(self.tr("Save As"))        saveAsFile.setStatusTip(self.tr("Save the active document with a new name"))        #connect(saveAsFile, SIGNAL(triggered()), this, SLOT(save()))        openFile = backstage.addAction(DemoRibbonWindow.createIcon(DemoRibbonWindow.Image_Open), self.tr("&Open"))        openFile.setShortcut(self.tr("Ctrl+O"))        openFile.setToolTip(self.tr("Open"))        openFile.setStatusTip(self.tr("Open an existing document"))        #connect(openFile, SIGNAL(triggered()), this, SLOT(open()));        infoPage = RibbonBackstageInfoPage(self)        backstage.addPage(infoPage)        savePage = RibbonBackstageSavePage(self)        backstage.addPage(savePage)        aboutPage = RibbonBackstageAboutPage(self)        backstage.addPage(aboutPage)        actOptions = backstage.addAction(QIcon(":/res/smallOptions.png"), self.tr("Options"))        #connect(actOptions, SIGNAL(triggered()), this, SLOT(pressButton()));        backstage.addSeparator()        actExit = backstage.addAction(QIcon(":/res/smallClose.png"), self.tr("Exit"))       # connect(actExit, SIGNAL(triggered()), this, SLOT(close()));        sysButton = self.ribbonBar().systemButton()        if sysButton != None:            sysButton.setBackstage(backstage)        backstage.open()    def createQuickAccessBar(self):        quickAccessBar = self.ribbonBar().quickAccessBar()        if quickAccessBar != None:            action = quickAccessBar.actionCustomizeButton()            action.setToolTip(self.tr("Customize Quick Access Bar"))            smallButton = quickAccessBar.addAction(DemoRibbonWindow.createIcon(DemoRibbonWindow.Image_New),self.tr("New"))            smallButton.setToolTip(self.tr("Create a new document"))            self.connect(smallButton, QtCore.SIGNAL("triggered()"), self.pressButton)            quickAccessBar.setActionVisible(smallButton, False)            smallButton = quickAccessBar.addAction(DemoRibbonWindow.createIcon(DemoRibbonWindow.Image_Open), self.tr("Open"))            smallButton.setToolTip(self.tr("Open an existing document"))            self.connect(smallButton, QtCore.SIGNAL("triggered()"), self.pressButton)            quickAccessBar.setActionVisible(smallButton, False)            smallButton = quickAccessBar.addAction(DemoRibbonWindow.createIcon(DemoRibbonWindow.Image_Save), self.tr("Save"))            smallButton.setToolTip(self.tr("Save the active document"))            self.connect(smallButton, QtCore.SIGNAL("triggered()"), self.pressButton)            smallButton = quickAccessBar.addAction(QIcon(":/res/smallUndo.png"), self.tr("&Undo"))            smallButton.setShortcut(QKeySequence.Undo)            smallButton.setEnabled(False)            smallButton = quickAccessBar.addAction(QIcon(":/res/smallRedo.png"), self.tr("&Redo"))            smallButton.setShortcut(QKeySequence.Redo)            smallButton.setEnabled(False)            quickAccessBar.setVisible(True)    def createRibbon(self):        pageButtons = self.ribbonBar().addPage(self.tr("&Buttons"))        if pageButtons != None:            splitPopup = QMenu(self)            splitPopup.addAction(self.tr("Option 1"))            splitPopup.addAction(self.tr("Option 2"))            splitPopup.addAction(self.tr("Option 3"))            groupClipboard = pageButtons.addGroup(self.tr("Clipboard"))            if groupClipboard != None:                editPaste = QMenu(self)                actionPaste1 = editPaste.addAction(QIcon(":/res/smallClipboard.png"), self.tr("Paste"))                actionPaste1.setPriority(QAction.LowPriority)                actionPaste1.setShortcut(QKeySequence.Paste)                actionPaste2 = groupClipboard.addAction(QIcon(":/res/clipboard.png"), self.tr("&Paste"), Qt.ToolButtonTextUnderIcon, editPaste)                actionPaste2.setPriority(QAction.LowPriority)                actionPaste2.setShortcut(QKeySequence.Paste)                actionCut = groupClipboard.addAction(QIcon(":/res/smallCut.png"), self.tr("&Cut"), Qt.ToolButtonTextBesideIcon)                actionCut.setShortcut(QKeySequence.Cut)                actionCopy = groupClipboard.addAction(QIcon(":/res/smallCopy.png"), self.tr("&Copy"), Qt.ToolButtonTextBesideIcon)                actionCopy.setShortcut(QKeySequence.Copy)                groupClipboard.addAction(QIcon(":/res/smallFormatPainter.png"), self.tr("F&ormat Pointer"), Qt.ToolButtonTextBesideIcon)                groupClipboard.setEnabled(False)            groupView = pageButtons.addGroup(self.tr("View"))            if groupView != None:                checkStatusBar = QCheckBox(self.tr("Status Bar"))                checkStatusBar.setToolTip(self.tr("CheckBox 1"))                checkStatusBar.setCheckState(Qt.Checked)                groupView.addWidget(checkStatusBar)                #connect(checkStatusBar, SIGNAL(stateChanged(int)), this, SLOT(hideStatusBar(int)));        pageWindow = self.ribbonBar().addPage(self.tr("&Window"))        pageContext = self.ribbonBar().addPage(self.tr("&Context Tab"))        if pageContext != None:            pageContext.setContextColor(Qtitan.ContextColorGreen)        self.ribbonBar().setFrameThemeEnabled()    def createDockWindows(self):        dock = QDockWidget(self.tr("Styles"), self)        dock.setAllowedAreas(Qt.AllDockWidgetAreas)        styleWidget = QWidget()        styleGroup = QWidget()        listLayout = QVBoxLayout()        listLayout.setMargin(0)        customerList = QListWidget()        for i in range(0, 10):            customerList.insertItem(i, QListWidgetItem(self.tr("Item ") + str(i+1)))        listLayout.addWidget(customerList)        styleGroup.setLayout(listLayout)        optionsGroup = QGroupBox(self.tr("Preview"))        optionsLayout = QVBoxLayout()        showPreviewBox = QCheckBox(self.tr("Show Preview"))        showPreviewBox.setEnabled(False)        linkedStylesBox = QCheckBox(self.tr("Disable Linked Styles"))        optionsLayout.addWidget(showPreviewBox)        optionsLayout.addWidget(linkedStylesBox)        optionsGroup.setLayout(optionsLayout)        mainLayout = QVBoxLayout()        mainLayout.addWidget(styleGroup)        mainLayout.addWidget(optionsGroup)        styleWidget.setLayout(mainLayout)        dock.setWidget(styleWidget)        self.addDockWidget(Qt.LeftDockWidgetArea, dock)    #    QList<QDockWidget*> docks; docks << dock;    #    QList<int> sizes; sizes << 120;    #    resizeDocks(docks, sizes, Qt::Vertical);    def open(self):        fileName = QFileDialog.getOpenFileName(self, self.tr("Open"))        if not fileName:            self.setCurrentFile(fileName)            self.statusBar().showMessage(self.tr("File loaded"), 2000)    def save(self):        fileName = QFileDialog.getSaveFileName(self, self.tr("Save As"), self.tr("Document"), "*.txt")[0]        if fileName == "":            return False        self.setCurrentFile(fileName)        self.statusBar().showMessage(self.tr("File saved"), 2000)        return True    def openRecentFile(self, file):        QMessageBox.information(self, self.windowTitle(),                                "Open Recent File. " + file, QMessageBox.Ok)    def print(self):        printer = QPrinter()        dialog = QPrintDialog(printer, self)        return dialog.exec() == QDialog.Accepted    def printSetup(self):        self = self    def hideStatusBar(self, state):        self.statusBar().setVisible(state = Qt.Checked)    def pressButton(self):            QMessageBox.information(self, self.windowTitle(), "Button pressed.", QMessageBox.Ok)    def showBackstage(self):        quickAccessBar = self.ribbonBar().quickAccessBar()        if quickAccessBar != None:            quickAccessBar.setEnabled(False)        self.actionRibbonMinimize.setEnabled(False)        self.menuOptions.setEnabled(False)    def hideBackstage(self):        quickAccessBar = self.ribbonBar().quickAccessBar()        if quickAccessBar != None:            quickAccessBar.setEnabled(True)        self.actionRibbonMinimize.setEnabled(True)        self.menuOptions.setEnabled(True)    def setDPIToggled(self, on_):        #self.ribbonStyle.setDPIAware(on_)        on_ = on_    def setCurrentFile(self, fileName):        self.setWindowFilePath(fileName)        settings = QSettings(QSettings.UserScope, "Developer Machines")        files = settings.value("recentFileList").toStringList()        files.removeAll(fileName)        files.prepend(fileName)        while files.size() > 9:            files.removeLast()        settings.setValue("recentFileList", files)if __name__ == "__main__":    app = QApplication(sys.argv)    app.setApplicationName("PyQtitanRibbon Backstage Sample");    app.setOrganizationName("Developer Machines");    w = MainWindow()    w.show()    sys.exit(app.exec_())

BackstageView.qrc

<RCC>    <qresource prefix="/">        <file>res/clipboard.png</file>        <file>res/smallClipboard.png</file>        <file>res/smallCopy.png</file>        <file>res/smallCut.png</file>        <file>res/smallFormatPainter.png</file>        <file>res/ChangeFileType.png</file>        <file>res/CreateDocument.png</file>        <file>res/smallRedo.png</file>        <file>res/smallUndo.png</file>        <file>res/smallOptions.png</file>        <file>res/smallClose.png</file>        <file>res/ScreenPreview.png</file>        <file>res/ProtectDocument.png</file>        <file>res/CheckIssues.png</file>        <file>res/MngVersions.png</file>        <file>res/SendUsing.png</file>        <file>res/SaveWeb.png</file>        <file>res/SaveSharePoint.png</file>        <file>res/Publish.png</file>        <file>res/devmachines.png</file>        <file>res/help.png</file>        <file>res/background.png</file>        <file>../../shared/res/about.png</file>        <file>../../shared/res/ribbonMaximize.png</file>        <file>../../shared/res/ribbonMinimize.png</file>    </qresource></RCC>

BackstageView.cpp

#include <QApplication>#include <QMenu>#include <QtnRibbonDef.h>#include "backstagepages.h"/* BackstagePageInfo */BackstagePageInfo::BackstagePageInfo(QWidget* parent)    : RibbonBackstagePage(parent){    ui.setupUi(this);    createActions();    createMenus();    int maxWidth = ui.protectDocumentBut->sizeHint().width();    maxWidth = qMax(maxWidth, ui.checkIssuesBut->sizeHint().width());    maxWidth = qMax(maxWidth, ui.mngVersionsBut->sizeHint().width());    ui.protectDocumentBut->setMinimumWidth(maxWidth);    ui.protectDocumentBut->setMaximumWidth(maxWidth);    ui.checkIssuesBut->setMinimumWidth(maxWidth);    ui.checkIssuesBut->setMaximumWidth(maxWidth);    ui.mngVersionsBut->setMinimumWidth(maxWidth);    ui.mngVersionsBut->setMaximumWidth(maxWidth);}BackstagePageInfo::~BackstagePageInfo(){}void BackstagePageInfo::createActions(){    m_actMark = new QAction(tr("Mark as &Final"), this);    m_actMark->setStatusTip(tr("Let readers know the document is final and make it read-only."));    m_actPassword = new QAction(QIcon(QStringLiteral(":/res/ProtectDocument.png")), tr("Encrypt with Password"), this);    m_actMark->setStatusTip(tr("Requare a password to open this document"));    m_actInspect = new QAction(tr("&Inspect Document"), this);    m_actMark->setStatusTip(tr("Check the document for hidden properties or personal information."));    m_actAccessibility = new QAction(tr("Check Accessibility"), this);    m_actMark->setStatusTip(tr("Check the document for content that people with disabilities might find difficult to read."));}void BackstagePageInfo::createMenus(){    QMenu* menu = new QMenu(this);    menu->addAction(m_actMark);    menu->addAction(m_actPassword);    ui.protectDocumentBut->setMenu(menu);    menu = new QMenu(this);    menu->addAction(m_actInspect);    menu->addAction(m_actAccessibility);    ui.checkIssuesBut->setMenu(menu);}/* BackstagePageSaveEmail */BackstagePageSaveEmail::BackstagePageSaveEmail(QWidget* parent)    : RibbonBackstagePage(parent){    ui.setupUi(this);}BackstagePageSaveEmail::~BackstagePageSaveEmail(){}/* BackstagePageSaveEmail */BackstagePageSaveWeb::BackstagePageSaveWeb(QWidget* parent)    : RibbonBackstagePage(parent){    ui.setupUi(this);}BackstagePageSaveWeb::~BackstagePageSaveWeb(){}/* BackstagePageSave */BackstagePageSave::BackstagePageSave(QWidget* parent)    : RibbonBackstagePage(parent){    m_separator = new RibbonBackstageSeparator(this);    m_separator->setOrientation(Qt::Vertical);    ui.setupUi(this);    ui.pageWrapper->setText(QString());    m_pageSaveEmail = new BackstagePageSaveEmail(ui.pageWrapper);    m_pageSaveWeb = new BackstagePageSaveWeb(ui.pageWrapper);    m_pageSaveWeb->hide();    QActionGroup* actGroup = new QActionGroup(this);    m_actSendEmailButton = actGroup->addAction(ui.sendEmailButton->icon(), ui.sendEmailButton->text());    m_actSendEmailButton->setCheckable(true);    m_actSaveWebButton = actGroup->addAction(ui.saveWebButton->icon(), ui.saveWebButton->text());    m_actSaveWebButton->setCheckable(true);    m_actSharePointButton = actGroup->addAction(ui.sharePointButton->icon(), ui.sharePointButton->text());    m_actSharePointButton->setCheckable(true);    m_actBlogPostButton = actGroup->addAction(ui.blogPostButton->icon(), ui.blogPostButton->text());    m_actBlogPostButton->setCheckable(true);    m_actFileTypeButton = actGroup->addAction(ui.fileTypeButton->icon(), ui.fileTypeButton->text());    m_actFileTypeButton->setCheckable(true);    m_actCreateDocButton = actGroup->addAction(ui.createDocButton->icon(), ui.createDocButton->text());    m_actCreateDocButton->setCheckable(true);    ui.sendEmailButton->setDefaultAction(m_actSendEmailButton);    ui.saveWebButton->setDefaultAction(m_actSaveWebButton);    ui.sharePointButton->setDefaultAction(m_actSharePointButton);    ui.blogPostButton->setDefaultAction(m_actBlogPostButton);    ui.fileTypeButton->setDefaultAction(m_actFileTypeButton);    ui.createDocButton->setDefaultAction(m_actCreateDocButton);    m_actSendEmailButton->setChecked(true);    connect(actGroup, SIGNAL(triggered(QAction*)), this, SLOT(triggeredPage(QAction*)));}BackstagePageSave::~BackstagePageSave(){}void BackstagePageSave::triggeredPage(QAction* act){    if (m_actSendEmailButton == act)    {        m_pageSaveWeb->hide();        m_pageSaveEmail->show();    }    else if (m_actSaveWebButton == act)    {        m_pageSaveWeb->show();        m_pageSaveEmail->hide();    }    else    {        m_pageSaveWeb->hide();        m_pageSaveEmail->hide();    }}void BackstagePageSave::resizeEvent(QResizeEvent* event){    QWidget::resizeEvent(event);    m_pageSaveEmail->setGeometry(QRect(QPoint(0, 0), ui.pageWrapper->size()));    m_pageSaveWeb->setGeometry(QRect(QPoint(0, 0), ui.pageWrapper->size()));    QRect rc = ui.verticalLayoutTabs->geometry();    m_separator->setGeometry(QRect(QPoint(rc.right() - 1, 0), QSize(3, size().height())));}/* BackstagePageSave */BackstagePageAbout::BackstagePageAbout(QWidget* parent)    : RibbonBackstagePage(parent){    ui.setupUi(this);    QString str = ui.labelVersion->text();    if (!str.isEmpty())    {        QString strVersion(tr("Version:"));        int index = str.indexOf(strVersion);        if (index != -1)            ui.labelVersion->setText(str.insert(index + strVersion.length(),                QLatin1Char(' ') + QStringLiteral(QTN_VERSION_RIBBON_STR)));    }}BackstagePageAbout::~BackstagePageAbout(){}

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月6日
下一篇 2021年7月6日

相关推荐

发表回复

登录后才能评论