我具有以下Qt5.11.0代码来创建qdockwidget。小部件的性质使得有意义的是,当ockockwidget浮动时,允许用户根据需要通过鼠标以交互式方式调整小部件的大小(以下示例是人为设计的,但我相信可以说明问题)。
当我运行此程序并将Dockwidget浮动到其自己的顶级窗口中时,事实证明,通过用户交互来调整Dockwidget的大小非常困难(Linux)或不可能(OSX)。在RHEL Linux 7.6上,将鼠标悬停在浮动Dockwidget的右下角会产生一个“调整大小”光标,但是,这种行为的热点最多只有一两个像素宽,这使用户非常困难并且令人沮丧。调整浮动的dockwidgets的大小。在OSX 10.13.6上,我完全看不到通过鼠标交互来调整Dockwidget大小的任何选项。
这是示例代码:
#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QTextEdit>
#include <QTextStream>
#include <QFile>
#include <QSizeGrip>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
mw->setCentralWidget( new QWidget() );
QDockWidget* dockWidget = new QDockWidget( "Code viewer", mw );
mw->addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
QTextEdit* textEdit = new QTextEdit( dockWidget );
dockWidget->setWidget( textEdit );
QFile file( "/etc/protocols" );
QString filler;
if( ! file.open( QIODevice::ReadOnly ) ) {
exit( -1 );
} else {
QTextStream in( &file );
while( ! in.atEnd() ) {
filler += in.readLine();
}
file.close();
}
textEdit->setText( filler );
mw->show();
return app.exec();
}
我已经尝试了QSizeGrip()并在整个网络上进行搜索,但到目前为止没有任何效果。
如何在Linux上使用Qt控制鼠标驱动的浮动ockockdget调整大小的热区大小,以及如何在OSX上使用Qt首先启用这种功能?
答案 0 :(得分:2)
不幸的是,分离的QDockWidget的边框是由窗口装饰器处理的,因此您不能通过样式表或调整大小手柄来更改它。 无论如何,您可以更改停靠小部件的窗口标志,以强制窗口装饰器绘制常规边框。
以下是您在示例中的操作方法:
#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QTextEdit>
#include <QTextStream>
#include <QFile>
#include <QSizeGrip>
int main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
mw->setCentralWidget( new QWidget() );
QDockWidget* dockWidget = new QDockWidget( "Code viewer", mw );
mw->addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
// handle floating changes
QObject::connect(dockWidget, &QDockWidget::topLevelChanged, [dockWidget] (bool floating)
{
if (floating)
{
dockWidget->setWindowFlags(Qt::Window);
dockWidget->show();
}
});
QTextEdit* textEdit = new QTextEdit( dockWidget );
dockWidget->setWidget( textEdit );
QFile file( "/etc/protocols" );
QString filler;
if( ! file.open( QIODevice::ReadOnly ) ) {
exit( -1 );
} else {
QTextStream in( &file );
while( ! in.atEnd() ) {
filler += in.readLine();
}
file.close();
}
textEdit->setText( filler );
mw->show();
return app.exec();
}
Here,您可以找到所有可用窗口标记的描述,以自定义窗口小部件的外观。