Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何防止QMenuBar中的cornerWidget被剪切_Qt_Qt5_Qmenubar - Fatal编程技术网

Qt 如何防止QMenuBar中的cornerWidget被剪切

Qt 如何防止QMenuBar中的cornerWidget被剪切,qt,qt5,qmenubar,Qt,Qt5,Qmenubar,我正在OSX小牛上编写新手Qt5(.4.0)代码。下面是我的独立测试用例: #include <QApplication> #include <QMainWindow> #include <QtGui> #include <QMenuBar> #include <QGridLayout> #include <QPushButton> int main( int argc, char *argv[] ) { QApp

我正在OSX小牛上编写新手Qt5(.4.0)代码。下面是我的独立测试用例:

#include <QApplication>
#include <QMainWindow>
#include <QtGui>
#include <QMenuBar>
#include <QGridLayout>
#include <QPushButton>

int
main( int argc, char *argv[] ) {
    QApplication app( argc, argv );

    QMainWindow* mw = new QMainWindow();

    mw->menuBar()->setNativeMenuBar( false );

    QMenu* fileMenu = mw->menuBar()->addMenu( "&File" );
    QMenu* optionsMenu = mw->menuBar()->addMenu( "&Options" );

    QWidget* menuCorner = new QWidget( mw->menuBar() );

    QGridLayout* cornerLayout = new QGridLayout();

    QPushButton* newWindowButton = new QPushButton( "New Window" );

    cornerLayout->addWidget( newWindowButton, 1, 0 );

    menuCorner->setLayout( cornerLayout );

    mw->menuBar()->setCornerWidget( menuCorner );

    mw->show();

    return app.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
int
main(int argc,char*argv[]){
QApplication应用程序(argc、argv);
QMainWindow*mw=新的QMainWindow();
mw->menuBar()->setNativeMenuBar(false);
QMenu*fileMenu=mw->menuBar()->addMenu(“&File”);
QMenu*选项menu=mw->menuBar()->addMenu(“&Options”);
QWidget*menuCorner=新的QWidget(mw->menuBar());
QGridLayout*cornerLayout=新的QGridLayout();
QPushButton*newWindowButton=新QPushButton(“新窗口”);
cornerLayout->addWidget(newWindowButton,1,0);
菜单角->设置布局(角落布局);
mw->menuBar()->setCornerWidget(menuCorner);
mw->show();
返回app.exec();
}
“新窗口”按钮按预期显示在菜单栏的右侧,但“新窗口”按钮的下半部分被菜单栏的底部分隔线夹住并隐藏:

如何使新的“拐角”小部件按钮在菜单栏中完全显示而不被剪裁


谢谢

OSX菜单栏必须有固定的高度,并且您的按钮不能安装在那里。尝试删除布局页边距:

cornerLayout->setContentsMargins(0, 0, 0, 0);
和/或使按钮变小:

newWindowButton->setMaximumHeight(30);
此外,调整利润率,使其最适合您的需要:

menuCorner->setStyleSheet("margin-top: 2");
对我来说,情况就是这样:


谢谢@svlasov。这两种方法都使“新窗口”按钮几乎完全可见,但是在这两种情况下,按钮的底部仍然被菜单栏的底部分隔线所夹持。为了使按钮在菜单栏中完全可见,我必须降低到最大高度12,然后剪辑按钮文本,使按钮变得不方便。既然我调用了
mw->menuBar()->setNativeMenuBar(false)
,我难道不应该免受OSX菜单栏的固定高度限制吗?有没有办法强迫非本机菜单栏适应按钮的自然大小?@lcikgl你能发布一个屏幕截图吗?我将继续接受@svlasov的答案,因为它启发了一个可行的解决方法,即调用
mw->menubar()->setMinimumHeight(30)以及
角落布局->设置内容边缘(0,0,0,0)。这并不完美,因为“文件”和“选项”在水平中心上方偏移,加上我不得不硬连线30像素的神奇数字,但结果是可以接受的。似乎应该有一个解决方案,允许Qt布局引擎自动调整按钮和菜单栏,使它们看起来自然,而无需硬连线的魔术数字。欢迎反馈。您好@svlasov,我刚刚看到您的截图请求。我尝试过这样做,但是作为一个新的海报,我还没有足够的声誉点来发布图片。你是想把按钮放到全局菜单还是窗口菜单?发布截图url。