如何在QMainWindow中为3个小部件创建一个表格化的底座?
我正在使用下面的代码:
widget1 = new QDockWidget(this);
widget1 ->setObjectName("name1");
addDockWidget(Qt::LeftDockWidgetArea, widget1);
widget2 = new QDockWidget(this);
widget2 ->setObjectName("name2");
addDockWidget(Qt::LeftDockWidgetArea, widget2);
tabifyDockWidget(widget2, widget1);
widget3 = new QDockWidget(this);
widget3->setObjectName("name3");
addDockWidget(Qt::LeftDockWidgetArea, widget3);
tabifyDockWidget(widget3, widget1);
Run Code Online (Sandbox Code Playgroud)
此代码生成两个停靠点:Dock 2,Dock 1和3.
在Qt中,您可以列出dockWidgets.如果我这样做,标签会显示在dockWidgets的底部,如左侧草图所示.这是我在Windows 7下使用最新的Qt4和PyQt4获得的行为.如何让Qt将标签放在dockWidgets顶部,如右图所示?
default: tabs on bottom I want: tabs on top
+--------------------+ +------+-----+
| dockWidget1 | | tab1 | tab2|-------+
| | | |
| tab1 | tab2|-------| | dockWidget1 |
+------+-----+ +--------------------+
Run Code Online (Sandbox Code Playgroud) 我试图在QDockWidget的KeyPressedEvent上添加一些逻辑。它在没有QDockWidget的情况下(即在主窗口上)工作,但在QDockWidget上却不工作。
这是我尝试过的:
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from qgis.core import QgsProject
from .progress_bar import Ui_MainWindow_Progress
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QApplication.translate(context, text, disambig)
class Ui_MainWindow(QMainWindow):
def __init__(self, iface):
super().__init__()
self.iface = iface
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(356, 750)
self.pushButton_exit = QPushButton(MainWindow)
self.pushButton_exit.setGeometry(QtCore.QRect(290, 0, 50, 23))
self.pushButton_exit.setObjectName(_fromUtf8("pushButton_exit"))
self.pushButton_exit.setStyleSheet("background-color: red")
self.label_4 = QLabel(MainWindow)
self.label_4.setGeometry(QtCore.QRect(20, …
Run Code Online (Sandbox Code Playgroud) 当我在同一个地方组合多个QDockWidgets时,它们的标签位于底部.有没有办法把它们放在顶部?
更好的是,如果我可以用标签本身替换标题栏.Eclipse IDE具有非常相似的行为,如此屏幕截图所示:
.
例如,JUnit选项卡也是它的标题,可以拖动它以将其停靠在其他位置.
我正在尝试捕获几个可以动态添加到QMainWindow的dockWidgets的closeEvent.我不清楚如何确定哪个小部件已关闭..这是一个简化的例子:
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.leftDockWidget = QtGui.QDockWidget('pick tool', self)
self.leftDockWidget.setWidget( QtGui.QLabel('a dock widget') )
self.addDockWidget( QtCore.Qt.LeftDockWidgetArea, self.leftDockWidget )
self.leftDockWidget.closeEvent = self.dockWidgetCloseEvent
self.show()
def dockWidgetCloseEvent(self, event):
print event
# how to get sender widget ?
Run Code Online (Sandbox Code Playgroud)
event.sender()似乎不存在..任何想法?
谢谢
有没有一种方法可以更改样式表中QDockWidget(Qt 4.8)的悬停/按下图标?我正在使用这种样式来将按钮图像更改为默认状态:
QDockWidget{
font-weight: bold;
titlebar-close-icon: url(:/icons/ui-dock-close-off.png);
titlebar-normal-icon: url(:/icons/ui-dock-float-off.png);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的方法,但似乎都没有用。
QDockWidget::float-button:hover{
image: url(:/icons/icons/ui-dock-float-hover.png);
}
QAbstractButton#qt_dockwidget_floatbutton{
image: url(:/icons/icons/ui-dock-float-hover.png);
}
Run Code Online (Sandbox Code Playgroud) 我正面临着我的一个问题QDockWidget
.我有几个QWidget
项目,QDockwidget
有时有时看不到.
我希望我QDockWidget
根据其内容调整自己的大小...不仅QWidgets
在它出现时,而且当它们消失时......
到目前为止,当我显示QDockWidget
更多内容时,我会自行调整大小QWidgets
,但是当我让它们消失时,QDockWidget
保持在他之前的大小...
有什么想法要帮忙吗?
提前致谢!
我试图禁用关闭的“ x”按钮,并且我认为可以通过将DockWidgetFeature设置为仅可移动和可浮动来起作用。
def CreateDockWidget (self):
Pane = QtGui.QDockWidget()
Pane.DockWidgetFeatures = QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetMovable;
Pane.setAllowedAreas( QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea )
textBox1 = QtGui.QTextEdit()
Pane.setWidget(textBox1 )
self.addDockWidget( QtCore.Qt.LeftDockWidgetArea, Pane )
Run Code Online (Sandbox Code Playgroud)
为什么上述方法不起作用?顺便说一句,如果我没有设置floatable,它将保持可浮动状态,直到其不可停靠(floating)为止,然后我将无法重新停靠它。这是为什么 ?
谢谢
Qt 的 QMainWindow 能够停靠从 QDockWidget 派生的窗口。如果它们中的几个堆叠在一起,它也会将一个放在另一个上面,从而产生一个标签栏。每当 QDockWidget 的状态改变时,都会发出一个信号 topLevelChanged()。在这一点上,我想访问底层 QTabWidget 来为新添加的选项卡设置图标。我该怎么做?我的耐心已经结束,试图从 Qt 的文档和源代码中挖掘答案。先感谢您。
所以图标我想在目录/索引选项卡上。
我一直在尝试像平常对QDialog所做的那样将按钮添加到未固定的QDockWidget窗口中,但没有成功,如下所示:
QDockWidget* dw = new QDockWidget(QString("Stream %1").arg(i + 1), this);
dw->setWindowFlags((dw->windowFlags() | Qt::WindowMaximizeButtonHint |
Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint));
Run Code Online (Sandbox Code Playgroud)
当我取消固定它们时,它们仍然只有[X]关闭按钮。
我想念什么?
开发环境信息: Windows 10 x64,Visual Studio 2015,Qt 5.7.1,C ++
现在我QDockWidgets
在应用程序的左侧有四个定制的。当您启动应用程序时,每一项都是可见的,但由于每一项的可见性而非常小。
我希望其中的三个QDockWidgets
嵌套在一个主要的后面,以给予该优先级和屏幕的整个左侧。
有谁知道在创建它们时如何告诉QDockWidgets
嵌套?
我使用Qt Designer创建了一个表单,它有一些dockwidgets,这些dockwidgets有一些子窗口小部件.我如何在mainwindow.cpp中访问dockwidget和这些子窗口小部件?
qdockwidget ×12
qt ×8
c++ ×4
pyqt ×2
pyqt4 ×2
python ×2
qt4 ×2
qt5 ×2
icons ×1
qgis ×1
qmainwindow ×1
qt-designer ×1
resize ×1
tabbar ×1
tabs ×1