我有一个有效的应用程序。我在主窗口中添加了一个带有一些菜单的menuBar()。然后,我把它隐藏到了屏幕空间。我编写了下面的代码,以便当用户按下ALT键时,如果隐藏了菜单栏,则会显示该菜单栏,如果显示它则隐藏它。
void MainWindow::keyPressEvent( QKeyEvent *k ) {
if(k->modifiers() & Qt::AltModifier) {
menuBar()->setHidden(!menuBar()->isHidden());
if(menuBar()->hasFocus()) {
QMessageBox::information(this, "Info", "Focus !");
}
}
}
如您所见,我还添加了一个QMessageBox,以查看menuBar何时具有焦点。这个盒子只出现了一半的时间。它是这样的:
如何确保何时显示menuBar,它始终具有焦点?
答案 0 :(得分:1)
我想做同样的事情。我的解决方案,完整的例子,作为一个要点:
https://gist.github.com/xim/ee56564f425151ea2fa70f730d644873
对Qt 5.9.4进行了测试。
因为它包含很多其他垃圾,一个最小的例子:
# foreach perl app in the src/perl dir
while read -r dir ; do
echo -e "\n"
echo "start compiling $dir ..." ;
cd $product_instance_dir/src/perl/$dir ;
# run the autoloader utility
find . -name '*.pm' -exec perl -MAutoSplit -e 'autosplit($ARGV[0], $ARGV[1], 0, 1, 1)' {} \;
# foreach perl file check the syntax by setting the correct INC dirs
while read -r file ; do
perl -MCarp::Always -I `pwd` -I `pwd`/lib -wc "$file"
# run the perltidy inline
# perltidy -b "$file"
# sleep 3
ret=$? ;
test $ret -ne 0 && break 2 ;
done < <(find "." -type f \( -name "*.pl" -or -name "*.pm" \))
test $ret -ne 0 && break ;
echo "stop compiling $dir ..." ;
echo -e "\n\n"
cd $product_instance_dir ;
done < <(ls -1 "src/perl")
答案 1 :(得分:0)
您是否尝试过添加setFocus
命令?
void MainWindow::keyPressEvent( QKeyEvent *k ) {
if(k->modifiers() & Qt::AltModifier) {
menuBar()->setHidden(!menuBar()->isHidden());
menuBar()->setFocus(Qt::MenuBarFocusReason);
if(menuBar()->hasFocus()) {
QMessageBox::information(this, "Info", "Focus !");
}
}
}