如何正确配置QDockWidget,使其能够显示/隐藏?
我是QT GUI的新手,最初想配置一个QT Dock小部件,该小部件在按下键时会显示,假设" A",然后按下另一键时被隐藏,则说是" B".但是经过一些研究,我找不到任何相关解决方案. 我尝试创建一个切换按钮,然后首先按下该按钮将显示码头小部件,然后再次按下时会隐藏它.它工作正常,但是有什么方法可以做得更好或分配任何钥匙以显示和隐藏码头小部件? t_button = new QPushButton("B1",this); dockB = new QDockWidget(tr("Panel B"),this); dockB -> setAllowedAreas(Qt::AllDockWidgetAreas); addDockWidget(Qt::RightDockWidgetArea,dockB); dockB -> hide(); connect(t_button,SIGNAL(clicked()),this,SLOT(toggle())); void MainWind
96 2023-12-03
编程技术问答社区
一个QDockWidget上的多个小工具
我正在制作一个小应用程序,用于使用QT和C ++在图像上应用各种过滤器. 我的问题是,是否可以在 qdockwidget 上添加多个小部件? 因为我想添加按钮以重新应用码头上的最后5个过滤器. 这是我想实现的示例. 解决方案 可以将多个QWidget s添加到任何QWidget中. 看起来您可能想做这样的事情: QDockWidget dock(QLatin1String("Last filters")); QWidget* multiWidget = new QWidget(); QVBoxLayout* layout = new QVBoxLayout(); QPushButton* filter1 = new QPushButton(QLatin1String("Filter number 1")); QPushButton* filter2 = new QPushButton(QLatin1String("Filter number 2")); QPus
34 2023-12-03
编程技术问答社区
调整一个QDockWidget的大小
i具有包含多个QDockWidget s的QMainWindow.他们中只有一个应一次显示.我的问题是: 当我隐藏一个dockwidget并展示另一个时,新显示的大小与恰到隐藏的大小相同,无论我设置了什么qsizeizepolicys,sizehint,sizectraint!我希望新近显示的能够还原自己的最后大小,但找不到任何方法可以调整QDockWidget的方法,而无需使用setMinimumSize和setMaximumSize. 实际上有一种方法,但我认为这很丑陋: setMinimumWidth(500); setMaximumWidth(500); qApp().processEvents(); setMinimumWidth(0); setMaximumWidth(9999); 必须有更好的方法?有什么建议吗? 解决方案 来自文档: QdockWidget充当其子小部件的包装器,并用SetWidget()设置.自定义大小的提示,最小和最大尺
12 2023-11-11
编程技术问答社区
QDockWidget的可拖动标签
我正在使用qdockwidgets,并将其中两个放在应用程序的左侧,以便可以使用标签在它们之间进行选择.但是,QT对此的默认行为看起来很恐怖,并且不直觉.它不能拖动选项卡以移动小部件,而是将另一个栏放在所选选项卡下方(具有相同名称)的下方,而必须拖动.作为用户,很难弄清楚这一点. (我的qdoc​​kwidgets是"属性"和"库") 是否有一种方法可以摆脱第二个栏并制作它,以便我可以通过拖动标签来移动我的qdoc​​kwidgets? 解决方案 如果您将QTabWidgets添加到源自QMainWindow的主窗口中,则可以尝试tabifyDockWidget. 它像您想要的那样,它可以像两个QDockWidgets一样,当然可以拖动它们. dockWidget1 = new QDockWidget("Tab1") ; dockWidget2 = new QDockWidget("Tab2") ; this->addDockWidget(Qt::LeftDoc
12 2023-10-14
编程技术问答社区
码头的Qt大小调整事件
有没有办法在QT中捕获调整大小的码头大小?我需要能够检测何时调整码头的大小(以及何时更改其位置或"功能"更改).看起来QdockWidget没有"调整大小"信号. 解决方案 如果您不希望从一个调节大小的事件控制,则可以 installeventfilter 小例子看起来像(MainWindow.h):( MainWindow在此处存放Dockwidget) protected: bool eventFilter(QObject *obj, QEvent *event); 和(MainWindow.cc): MainWindow::MainWindow(QWidget* parent) : QWidget(parent) { ui_.setupUi(this); ui_.dockWidget->installEventFilter(this); } bool MainWindow::eventFilter(QObject *obj, QE
14 2023-09-03
编程技术问答社区
pyqt : 在Maya中调整qdockwidget的大小
我已经为玛雅制作了工具.我在QMainWindow中使用了QDockWidget进行整个UI组成.众所周知,我可以"保存"和"恢复"以保留Qtoolbar,QdockWidget等. 我不知道原因,但是在Maya中,我不能"恢复"实际状态.它可以恢复QToolbar的所有状态,除了QdockWidget的大小外,QDockWidget.因此,我想尝试以编程方式调整QDockWidget大小.有什么方法可以做到吗? 解决方案 尝试重新实现class MyWidget(QtGui.QWidget): _sizehint = None def setSizeHint(self, width, height): self._sizehint = QtCore.QSize(width, height) def sizeHint(self): if self._sizehint is not None: return self._sizehint return super(MyWidg
42 2023-08-08
编程技术问答社区
改变内容时的QDockWidget行为
我的QDockWidget之一都面临问题.我有几个QWidget QDockwidget有时不可见的项目. 我希望我的QDockWidget根据其内容的不同...不仅在QWidgets出现时,而且还会消失时... 到目前为止,我的QDockWidget在其中显示更多QWidgets时要调整自身的大小,但是当我使它们消失时,QDockWidget停留在他以前的大小... 有任何帮助吗? 预先感谢! 解决方案 多年来,关于QMainWindow码头区域中A QDockWidget大小的控制,已经有各种各样的职位.我也一直在为这个问题而苦苦挣扎,并且只能实现部分且不令人满意的解决方案.主要的问题(如果您为双关语为原谅)是无法从QMainWindow的上下文中掌握对接机制的工作,该机制是为了管理其码头区域的工作.尝试使用布局管理 - 尺寸策略和大小的提示控件 - 无效; QMainWindow在更改码头区域尺寸时做自己的事情. 首先,我取得了什么有限的成功:
56 2023-08-08
编程技术问答社区
C++以编程方式调整停靠的Qt QDockWidget的大小?
我刚刚开始从事一个新的C ++/QT项目.这将是一个基于MDI的IDE,带有停靠的小部件,例如文件树,对象浏览器,编译器输出等.到目前为止,一件事使我烦恼:我无法弄清楚如何编程使QDockWidget编程制作QDockWidget较小.例如,此片段创建我的底部码头窗口"构建信息": m_compilerOutput = new QTextEdit; m_compilerOutput->setReadOnly(true); dock = new QDockWidget(tr("Build Information"), this); dock->setWidget(m_compilerOutput); addDockWidget(Qt::BottomDockWidgetArea, dock); 启动时,我的程序看起来像这样(请记住开发的早期阶段): 但是,我希望它看起来像: 我似乎无法实现这一目标. qdockwidget上的QT引用说: 自定义尺寸提示,最小和最
26 2023-08-08
编程技术问答社区
浮动子QMainWindow (QMainWindow作为主QMainWindow的子部件)
我将QMainWindow用作我的主QMainWindow的儿童.我得到了一个可以用于码头小部件的其他区域(QDockWidget). 根据以下文章,这还可以,它对我也很好. /threads/12569-qmainwindow-as-a-a-a-child of-qmainwindow 使QMainWindow行为作为普通小部件,我揭示了窗口标志,在上面的一篇文章中提到了此技巧. 现在,我还希望能够及其所有停靠的小部件浮动这个孩子QMainWindow.换句话说,我想恢复"使其成为普通小部件"的步骤.不幸的是,这确实行不通.它从主窗口消失了,但根本看不到. 有什么方法来解决它? // this is the child QMainWindow if (this->m_infoAreaFloating) { // this should give me a floating window besides the main window
12 2023-07-18
编程技术问答社区
没有中央部件的QDockWidget布局
我对QDockWidget有问题.我正在使用QT Designer,并且我想构建一个只有码头网络的应用程序,并在上方有一个小条用于属性.问题是我没有主Qwidget就无法构建应用程序(我的意思是 qdockwidgets). 这是我的屏幕截图: 注释1) - 这是我无法删除的空间.当我从XML删除它时,QT设计器崩溃.如果它不可移动,我如何设置左qdockwidget和右QDOCKWIDGET,以具有整​​个窗口宽度的一半? 解决方案 您可以使用setCentralWidget(0); 删除CentralWidget 其他解决方案 这不能在QT设计器中完成.但是,有一个 qt论坛线程一种以编程方式进行操作的方法. 首先,您必须将主窗口设置为 docknestingenabled 属性属性true true在QT Designer中.然后,创建UI后,编程删除中央小部件,然后删除,重新添加并重新显示所有码头小部件. 当我测试此问题时,我发现我需要用单次
28 2023-07-17
编程技术问答社区
Tabify 3 QDockWidget
如何在qmainwindow中为3个小部件创建一个tabified dock? 我正在使用bellow代码: 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); tabifyDoc
40 2023-07-17
编程技术问答社区
在QMainWindows之间拖动QDockWidgets
我有一个关于在QMainWindows之间拖动QDockWidgets的问题.我有一个带有不同" Dockareas"的应用程序,该应用程序具有一个或多个QdockWidgets的QMainWindow成员.此外,我想将QdockWidgets拖放到其他已经浮动的QdockWidgets(不是标签!)中. 要在拖放上具有不错的悬停效应,浮动QDockWidgets与QMainWindow成员一起嵌入了我的Dockarea的新实例中.现在,我拦截了拖动Qdockwidget的Mousemove事件,并在徘徊在我的Dockarea的另一个Qmainwindow上时更改其父.不幸的是,这会导致崩溃,并且看起来像原始的Qlayoutitem(此QdockWidget所在的地方)已经消失了. void QDockWidgetPrivate::moveEvent(QMoveEvent *event) { // ... // now this widgetItem memb
34 2023-07-17
编程技术问答社区
QDockWidget导致qt崩溃
我具有QT的版本,该版本内置在Ubuntu 11.10中.并且我正在尝试使用无法真正停靠的QDockWidget(基本上,我只想要一个窗口.我不想让视图成为最高视图,我不想要的,如果我要隐藏它,那么窗口就不会移动). 所以,我基本上是一个新的QT GUI项目,并且不要更改任何文件,除了mainwindow.cpp文件,我将其更改为: #include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QDockWidget *dockWidget = new QDockWidget(this); // Without window manage
34 2023-07-17
编程技术问答社区
如何在移除所有DockWidgets后调整QMainWindow的大小?
我正在尝试制作一个由QMainWindow组成的应用程序,该应用程序是QToolBar>>>>的中心小部件(可能不是通常的,但出于我的目的,工具栏非常适合).码头仅在下面允许.我在其中添加了QDockWidget,然后在QToolBar上添加了QAction,用removeDockWidget()和removeDockWidget()和restoreDockWidget(). QMainWindow的默认大小为800 x 24,QToolBar的maximumHeight也设置为24.在称为removeDockWidget()之后,QMainWindow的几何形状设置为(0,0,800,24),setGeometry(). . 我要实现的是将DockWidget删除时,将QMainWindow的高度调整到24. setGeometry()似乎是因为宽度和位置发生了相应的变化而起作用,但是很有趣的是,高度并没有刺激.这确实是我的问题:) 你怎么想? 这是一个屏幕-Cast
22 2023-07-17
编程技术问答社区
在QDockWidget中嵌入本地窗口
我试图从另一个过程中删除一个本机窗口,并在我的过程中将其作为对接小部件进行管理. 这与: 如何在QT应用程序中管理单独的GUI进程?/a> 我找到了以下几点,这使我很远: 问题是码头窗口的大小与包装包装的内容的大小不匹配(有一个宽度约为15px,高40px(示例请参见图片)). from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtCore import Qt import logging envent_type_lookup = {v:k for k,v in QtCore.QEvent.__dict__.items() if isinstance(v, int)} class DockingWindowProxy(QtWidgets.QDockWidget): def __init__(self, hwnd, *args, **kwargs): super().__init__
8 2023-07-17
编程技术问答社区
如何使QDockWidget出现在任务栏中?
我使用一个小技巧使用QDockWidget的子类. " Toplevelchanged"信号连接到此成员插槽: void MyDockWidget::updateWindowFlags(bool topLevel) { if (topLevel == true) { setWindowFlags(Qt::Dialog|Qt::CustomizeWindowHint|Qt::WindowTitleHint|Qt::WindowMaximizeButtonHint|Qt::WindowCloseButtonHint); // "setWindowFlags" hides the widget, show it again show(); } } 这效果很好(至少在Windows上,这是我的目标),并在标题栏中显示一个"最大化"按钮. 现在,我想使码头小部件像"顶级"小部件一样行为:并非总是在主窗口顶部,
40 2023-07-17
编程技术问答社区
QDockWidget浮动时改变背景颜色
我有一个带有透明背景的QdockWidget,但是我想在浮动时更改背景颜色或背景图像.看起来QT样式表没有伪状态可以告诉您它们是否漂浮,所以我想知道:这可以做吗? 解决方案 找到了解决方案.在代码中添加以下连接: connect(knobDock, &QDockWidget::topLevelChanged, [&] (bool isFloating) { if (isFloating) { setAttribute(Qt::WA_TranslucentBackground, false); setAttribute(Qt::WA_NoSystemBackground, false); } }); 这将导致码头窗口使用码头浮动时在样式表中指定的任何背景,但是当它停靠时,它将是透明的(即显示Mainwindow背景). . 其他解决方案 您可
6 2023-07-17
编程技术问答社区
QDockWidget | 浮动时没有边框的窗口
Win 7,QT 5.3 我在应用程序中使用QDockWidget.按预期工作. 现在,我通过将setTitleBarWidget(new QWidget(this))设置为默认构造的小部件来隐藏标题栏.这是根据QT文档的标准方式.同样有效,标题栏已经消失了. 为了将我的小部件作为窗口删除,我使用myDockWidget->setFloating(true)(在我自己的插槽中).但是现在,当小部件不可控制时,浮动窗口不再有边界(因此无法移动). 如果我发表评论setTitleBarWidget,myDockWidget->setFloating(true)也有效.因此,原始标题栏似乎包含了一些逻辑.但是,通过查看源代码,我找不到任何特别的东西. 有什么提示我能做什么来克服这个问题? 解决方案 这是预期的行为.参见QDockWidget::setTitleBarWidget文档: 如果设置了标题栏小部件,则QDOCKWIDGET将在漂浮时不会使用
98 2023-07-17
编程技术问答社区
QDockWidget的分割器在QMainWindow调整后会跳出。
在我的一个旧程序中,我在qdockwidget的内部有2列QTableWidget. 在现代建立它(QT 5.10),我似乎必须覆盖桌子的sizehint()才能获得它除了100px之外,要成为一个宽度.哪个有点烦人的(以前不需要这个 - 为什么默认表格的宽度不是桌子的宽度?) 但是,经过调整,现在还有另一个滋扰:如果用户为码头小部件的分离器进行任何移动,它将在任何窗口大小上丢失.我做了一点MCVE来显示效果...这是启动情况: 然后说用户稍微拖动分离器(可能是扩展,可能是收缩 - 没关系): 现在,他们将窗口的底部边缘稍微拖动一点,然后 snap ,它跳回首选大小(当鼠标首次开始拖动时,突然的跳跃就发生了): 将水平尺寸策略从QSizePolicy::Preferred更改为QSizePolicy::Ignored似乎并不影响这种行为,也没有呼叫setStretchLastSection()似乎也没有帮助. ,我希望如果垂直缩小窗口大小,则水平分离器
12 2023-07-17
编程技术问答社区
当停靠在主窗口的右侧时,QDockWidget的大小不对。
我是QT的新手,我正在尝试创建一个在窗户右侧停靠的码头.我为码头设置了最大和最小宽度(如下所示,您将在下面的代码中看到).如果添加Qt::LeftDockWidgetArea>的码头小部件,则可以使用,但是当它添加Qt::RightDockWidgetArea时,码头被"填充"到窗口的中心,如下: 我可能不是以正确的方式对码头进行尺寸.这是此窗口的代码: int main(int argv, char** args) { QApplication app(argv, args); QMainWindow window; QDesktopWidget* desktop = QApplication::desktop(); //Docks QDockWidget* propertyDock = new QDockWidget("",&window); QWidget* propertyDockContents = new QWidg
28 2023-07-17
编程技术问答社区