轉帖|使用教程|編輯:鮑佳佳|2021-08-09 11:25:00.007|閱讀 130 次
概述:該示例展示了如何將特殊小部件嵌入到應用程序 - BackstageView 中。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
QtitanRibbon組件實現(xiàn)了Microsoft Ribbon for Qt的概念。該組件設計用于使用Qt開發(fā)的任何類型的商業(yè)應用。與Qt一起,該組件為獲得應用程序提供了獨特的機會,該應用程序對于全球存在的三個主要平臺(Windows,Linux和Mac OSX)均可打造現(xiàn)代化外觀。
該示例展示了如何將特殊小部件嵌入到應用程序 - BackstageView 中。
BackstageView 是一個具有最大 z 順序并與整個窗口重疊的小部件。它位于按應用程序中經(jīng)常使用的菜單主題分組的按鈕。
TEMPLATE = app TARGET = "Ribbon_"$$member(TARGET, 0) QTITANDIR = $$quote($$(QTITANDIR)) isEmpty(QTITANDIR):QTITANDIR = $$quote($$PWD/../../../) include($$QTITANDIR/src/shared/qtitanribbon.pri) DESTDIR = $$QTITANDIR/bin DESTDIR = $$member(DESTDIR, 0)$$QTITAN_LIB_PREFIX DESTDIR = "$$DESTDIR" !debug_and_release|build_pass { CONFIG(debug, debug|release) { TARGET = $$member(TARGET, 0)d } } HEADERS = mainwindow.h \ backstagepages.h SOURCES = main.cpp \ mainwindow.cpp \ backstagepages.cpp FORMS = infopage.ui \ savepage.ui \ helppage.ui \ saveemailpage.ui \ savewebpage.ui \ RESOURCES = BackstageView.qrc include($$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, os sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../shared") from PySide2 import QtCore from PySide2.QtCore import Qt, QPoint, QSettings from PySide2.QtGui import QIcon, QPixmap, QKeySequence from PySide2.QtWidgets import (QWidget, QApplication, QAction, QMenu, QListWidget, QCheckBox, QDockWidget, QGroupBox, QVBoxLayout, QMessageBox, QListWidgetItem) from DemoRibbonWindow import DemoRibbonWindow from backstagepages import (RibbonBackstageInfoPage, RibbonBackstageSaveEmailPage, RibbonBackstageSaveWebPage, RibbonBackstageSavePage, RibbonBackstageAboutPage) from DevMachines import QtitanBase from DevMachines.QtitanBase import Qtitan, CommonStyle from DevMachines.QtitanRibbon import RibbonWorkspace, RibbonBackstageView import BackstageView_rc class 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_())
<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>
#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() { }
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: