6

私はubuntu11.10に組み込まれているバージョンのQtを持っています。そして、実際にはドッキングできないを使用しようとしていますQDockWidget(基本的には、フロートするウィンドウが必要です。ビューをトップレベルのビューにするだけではなく、OSウィンドウバーがそこに表示されます。したくない、そして私がそれを隠すとしたら、ウィンドウは移動できなくなります)。

したがって、私は基本的に新しいQt Guiプロジェクトを作成し、次のように変更するファイルを除いて、どのファイルも変更しませんmainwindow.cpp

#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にバグがあるだけなのか知りたいのですが。

4

1 に答える 1

7

ウィジェットをフローティングにしましたが、フロート可能ではありません。

dockWidget->setFeatures( QDockWidget::DockWidgetMovable | 
    QDockWidget::DockWidgetFloatable );

また、マウスをドラッグして、、およびを操作することによりmousePressEvent、移動可能なフレームレスウィンドウを作成することもできます。mouseReleaseEventmouseMoveEvent


今は役に立たないフロートボタンを隠す方法

ソースコードに基づいてQDockWidget、タイトルバーウィジェットがある場合、「フロートボタン」は表示されません。

 dockWidget->setTitleBarWidget(new QLabel("Dock Widget", dockWidget));

または、名前(文書化されていない)があるため、明示的に非表示にすることができます。

 QAbstractButton * floatButton = 
   dockWidget->findChild<QAbstractButton*>("qt_dockwidget_floatbutton");
 if(floatButton) 
     floatButton->hide();
于 2012-03-05T02:23:06.870 に答える