• 11521阅读
  • 5回复

[提问]大家进来看看,dockwidget的titlewidget的设置 [复制链接]

上一主题 下一主题
离线fcdding
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-29
想自定义dockwidget的titlewidget,在用settitlebarwidget来做,但是一用这个函数,之前的dockwidget就不能动了,不知道是怎么回事啊?
离线dbzhang800

只看该作者 1楼 发表于: 2011-03-29
贴出你的测试代码
离线fcdding

只看该作者 2楼 发表于: 2011-03-29
mydock::mydock(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
                dock = new QDockWidget(tr(" "), this);
                //mytitle = new title(dock);//直接这样创建就把mytitle这个widget直接创建到了dockwidget的titlewidget上了
                dock->setTitleBarWidget(mytitle) ;//但是这样去设置dockwidget就不能动了
}

ps:
mytitle是我单独建立的一个ui类,上面有一些自定义的图标,我想把dockwidget上面再加些功能!


                
                                  
离线fcdding

只看该作者 3楼 发表于: 2011-03-29
回 1楼(dbzhang800) 的帖子
mydock::mydock(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
                dock = new QDockWidget(tr(" "), this);
                //mytitle = new title(dock);//直接这样创建就把mytitle这个widget直接创建到了dockwidget的titlewidget上了
         dock->setTitleBarWidget(mytitle) ;//但是这样去设置dockwidget就不能动了
}

ps:
mytitle是我单独建立的一个ui类,上面有一些自定义的图标,我想把dockwidget上面再加些功能!

离线dbzhang800

只看该作者 4楼 发表于: 2011-03-30
给你一个完整的测试例子(这是一个完整的可运行的程序,这些工作其实是提问者做的,贴出在保持完整的情况下精简且能反映你的问题的代码)

注意:
1. 这是测试代码,仅用来测试,一个比较完善的 DockTitleBarWidget 会比这个复杂很多。
2. 这是python代码,但对Qt用户来说,python还是C++,理解上应该没有区别

  1. #dbzhang 2011
  2. try:
  3.     from PySide import QtCore,  QtGui
  4. except ImportError:
  5.     from PyQt4 import QtCore,  QtGui
  6.     
  7. class DockTitleBarWidget(QtGui.QWidget):
  8.     def __init__(self,  parent=None):
  9.         super(DockTitleBarWidget,  self).__init__(parent)
  10.         b1 = QtGui.QToolButton()
  11.         b1.setIcon(self.style().standardIcon(QtGui.QStyle.SP_TitleBarNormalButton))
  12.         b2 = QtGui.QToolButton()
  13.         b2.setIcon(self.style().standardIcon(QtGui.QStyle.SP_TitleBarCloseButton))
  14.         
  15.         features = self.parent().features()
  16.         b1.setEnabled(features & QtGui.QDockWidget.DockWidgetFloatable)
  17.         b2.setEnabled(features & QtGui.QDockWidget.DockWidgetClosable)
  18.         if features & QtGui.QDockWidget.DockWidgetVerticalTitleBar:
  19.             box = QtGui.QVBoxLayout(self)
  20.         else:
  21.             box = QtGui.QHBoxLayout(self)
  22.         box.setContentsMargins(0, 0, 0, 0)
  23.         box.addStretch()
  24.         box.addWidget(b1)
  25.         box.addWidget(b2)
  26.         
  27.         b1.clicked.connect(self.onB1Clicked)
  28.         b2.clicked.connect(self.onB2Clicked)
  29.     
  30.     def onB1Clicked(self):
  31.         self.parent().setFloating(not self.parent().isFloating())
  32.     
  33.     def onB2Clicked(self):
  34.         self.parent().close()
  35.         
  36.     
  37. class MainWindow(QtGui.QMainWindow):
  38.     def __init__(self,  parent=None):
  39.         super(MainWindow,  self).__init__(parent)
  40.         
  41.         dock1 = QtGui.QDockWidget("Dock1", self)
  42.         dock1.setFeatures(dock1.features() | QtGui.QDockWidget.DockWidgetVerticalTitleBar)
  43.         dock1.setTitleBarWidget(DockTitleBarWidget(dock1))
  44.         self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dock1)
  45.         
  46.         dock2 = QtGui.QDockWidget("Dock2", self)
  47.         dock2.setTitleBarWidget(DockTitleBarWidget(dock2))
  48.         self.addDockWidget(QtCore.Qt.RightDockWidgetArea,  dock2)
  49.         
  50.         central = QtGui.QPlainTextEdit()
  51.         self.setCentralWidget(central)
  52.     
  53. if __name__=='__main__':
  54.     import sys
  55.     app = QtGui.QApplication(sys.argv)
  56.     w = MainWindow()
  57.     w.show()
  58.     sys.exit(app.exec_())
[ 此帖被dbzhang800在2011-03-30 10:00重新编辑 ]
离线fcdding

只看该作者 5楼 发表于: 2011-03-30
回 4楼(dbzhang800) 的帖子
呵呵,好的,谢谢啦,我再提问的时候一定更具体点,这样也方便沟通嘛!我的问题代码随后贴上,我问的这个问题现在貌似解决了一小点,我运行一下,看看还有啥别的问题就把代码贴上来!
快速回复
限100 字节
 
上一个 下一个