首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QDockWidget导致qt崩溃

QDockWidget导致qt崩溃
EN

Stack Overflow用户
提问于 2012-03-05 07:01:11
回答 1查看 2K关注 0票数 6

我有内置到ubuntu 11.10中的Qt版本。我正在尝试使用一个不能真正停靠的QDockWidget (基本上,我只想要一个浮动的窗口。我不想让视图成为顶层视图,因为那样我就会有操作系统窗口栏在那里,这是我不想要的,如果我把它隐藏起来,那么窗口就不能移动)。

因此,我基本上创建了一个新的Qt项目,并且不更改任何文件,除了mainwindow.cpp文件,我将其更改为:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDockWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QDockWidget *dockWidget = new QDockWidget(this);
    // Without window management and attached to mainwindow (central widget)
    dockWidget->setFloating( true );
    // resize by frame only - not positional moveable
    dockWidget->setFeatures( QDockWidget::DockWidgetMovable );
    // never dock in mainwindow
    dockWidget->setAllowedAreas( Qt::NoDockWidgetArea );
    // title
    dockWidget->setWindowTitle( "Dock Widget" );
    // add contents. etc etc....
    dockWidget->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

问题是,当我移动小部件时,整个程序崩溃了。我想知道我是不是做错了什么,或者只是qt中的一个bug。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-05 10:23:07

您使小部件浮动,但不是可浮动的。

代码语言:javascript
复制
dockWidget->setFeatures( QDockWidget::DockWidgetMovable | 
    QDockWidget::DockWidgetFloatable );

你还可以拥有一个可移动的无边框窗口,只需控制鼠标在mousePressEventmouseReleaseEventmouseMoveEvent之间拖动即可。

如何隐藏现在无用的浮动按钮

根据QDockWidget源代码,如果有标题栏小工具,则不会显示“浮动按钮”:

代码语言:javascript
复制
 dockWidget->setTitleBarWidget(new QLabel("Dock Widget", dockWidget));

或者,因为它有一个名称(没有文档),所以您可以显式地隐藏它:

代码语言:javascript
复制
 QAbstractButton * floatButton = 
   dockWidget->findChild<QAbstractButton*>("qt_dockwidget_floatbutton");
 if(floatButton) 
     floatButton->hide();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9559666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档