如何使用qt在mac中使标签窗口从顶部滑动?

Posted

技术标签:

【中文标题】如何使用qt在mac中使标签窗口从顶部滑动?【英文标题】:how to make a tab window slide from top in mac using qt? 【发布时间】:2012-05-25 10:01:06 【问题描述】:

我正在使用带有 tabbuttons 和 qmaindwindow 的 qt 在 mac 中设计一个设置窗口。

当点击 qmainwindow 工具栏中的相应选项卡按钮时,我想显示一个从顶部滑动的选项卡窗口。 与mac系统偏好或vlc偏好滑动窗口动作相同。

希望有人知道实现它的方向吗?

提前致谢

滑动动作不起作用。事件我为 qmainwindow 中的每个选项卡尝试了 QDialog。

from PyQt4 import QtGui
from PyQt4 import QtCore

class Ui_windo(QtGui.QMainWindow):

    def __init__(self,parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.setObjectName("windo")
        self.resize(400, 300)
        self.toolbuttonGroup = QtGui.QButtonGroup()
        self.toolbuttonGroup.setObjectName("toolbuttonGroup")
        self.toolbuttonGroup.setExclusive(True)
        self.button0 = QtGui.QToolButton()
        self.button1 = QtGui.QToolButton()
        self.button2 = QtGui.QToolButton()
        self.tabbutton(self.button0, 'button0')
        self.tabbutton(self.button1, 'button1')
        self.tabbutton(self.button2, 'button2')

        _toolBar = self.addToolBar('test')
        _toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
        _toolBar.addWidget(self.button0)
        _toolBar.addWidget(self.button1)
        _toolBar.addWidget(self.button2)
        self.setUnifiedTitleAndToolBarOnMac(True);

        QtCore.QObject.connect(self.button0, QtCore.SIGNAL('clicked()'), self.dialog0)
        QtCore.QObject.connect(self.button1, QtCore.SIGNAL('clicked()'), self.dialog1)
        QtCore.QObject.connect(self.button2, QtCore.SIGNAL('clicked()'), self.dialog2)

    def dialog0(self):
        self._dialog0 = QtGui.QDialog()
        self._button0=QtGui.QPushButton(self._dialog0)
        self._button0.setText('Main dialog 0')
        self._dialog0.setModal(True)
        self.setCentralWidget(self._dialog0)

    def dialog1(self):
        self._dialog1 = QtGui.QDialog()
        self._button1=QtGui.QPushButton(self._dialog1)
        self._button1.setText('I m from dialog1')
        self._dialog1.setModal(True)
        self.setCentralWidget(self._dialog1)

    def dialog2(self):
        self._dialog2 = QtGui.QDialog()
        self._button2=QtGui.QPushButton(self._dialog2)
        self._button2.setText('I m from dialog2')
        self._dialog2.setModal(True)
        self.setCentralWidget(self._dialog2)

    def tabbutton(self, tabButton, text):
        self.toolbuttonGroup.addButton(tabButton)
        tabButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
        tabButton.setText(text)
        tabButton.setObjectName(text)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        tabButton.setIcon(icon)
        tabButton.setCheckable(True)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    ui = Ui_windo()
    ui.show()
    sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

使用 QDialog 并将父设置为必须“向下滑动”的窗口。它会“自动”完成

【讨论】:

标签窗口没有滑动,尽管我按照你的建议使用了“qdialog”。添加了我在 pyqt 中尝试过的代码。也许你能找到它滞后的原因。 @user971306 尝试用 self._dialogX.exec_() 替换 self.setCentralWidget(self._dialogX) 并将 self 添加到构造函数调用 (self._dialogX = QtGui.QDialog(self) ),您可以删除对 setModal 的调用,因为 exec_() 已经处理好了那个。 @alexisdm 选项卡窗口在 setCentralWidget 函数调用被删除时作为单独的对话框打开,而不是 qmainwindow 的选项卡。 @user971306 我可能是错的,但是当您更改选项卡时,Qt 似乎不会处理选项卡窗口大小动画,只有*** QDialog(请参阅 this QtQuaterly article),this answer建议即使使用 Cocoa,您也必须(几乎)手动完成。

以上是关于如何使用qt在mac中使标签窗口从顶部滑动?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FLTK 在 Windows、Mac OS X 和 Linux 中使窗口透明?

如何在颤动中使设备顶部面板(状态栏)具有与 AppBar 相同的背景颜色?

如何在轮播中使横向和纵向图像完全响应且高度相同?

如何使 SwiftUI 文本多行文本对齐从顶部和中心开始

Python:如何在 kivy 中使标签加粗

如何在发布版本中使标签不可见[关闭]