Como posso esconder/excluir o "?" Botão de ajuda na "barra de título" de uma caixa de diálogo QT?

StackOverflow https://stackoverflow.com/questions/81627

  •  09-06-2019
  •  | 
  •  

Pergunta

Estou usando o Qt Dialogs em um dos meus aplicativos.Preciso ocultar/excluir o botão de ajuda.Mas não consigo localizar exatamente onde consigo o botão de ajuda.Não tenho certeza se é um sinalizador específico na janela do Qt.

Foi útil?

Solução

Por padrão o Qt :: WindowContexThelpButtonHint O sinalizador é adicionado às caixas de diálogo. Você pode controlar isso com o Windowsflags parâmetro para o construtor de diálogo.

Por exemplo, você pode especificar apenas o Titlehint e SystemMenu bandeiras fazendo:

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

Se você adicionar o Qt :: WindowContexThelpButtonHint Sinalizador você receberá o botão de ajuda de volta.

Em Pyqt, você pode fazer:

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

Mais detalhes sobre sinalizadores de janelas podem ser encontrados no Windowtype Enum na documentação do QT.

Outras dicas

// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

Ok, eu encontrei uma maneira de fazer isso.

Ele lida com as bandeiras da janela. Então, aqui está o código que usei:

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

Mas, ao fazer isso, às vezes, o ícone da caixa de diálogo é redefinido. Portanto, para garantir que o ícone da caixa de diálogo não mude, você pode adicionar duas linhas.

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);

Eu encontrei esse problema no Windows 7, Qt 5.2, e a combinação de bandeiras que funcionou melhor para mim foi a seguinte:

Qt :: windowtitlehint | Qt :: WindowCloseButtonHint

Isso me dá um botão de fechamento, mas sem botão de ajuda do ponto de interrogação. Usando apenas qt :: windowtitlehint ou qt :: windowsystemmenuhint se livrou do botão Ajuda, mas também desativou o botão Fechar.

Como Michael Bishop sugeriu, estava brincando com o exemplo do Windowsflags que me levou a essa combinação. Obrigado!

A partir do qt 5.10, você pode desativar esses botões globalmente com um único QApplication atributo!

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

As respostas listadas aqui funcionarão, mas para responder, eu recomendo que você execute o programa de exemplo $QTDIR/examples/widgets/windowflags. Isso permitirá que você teste todas as configurações das bandeiras de janelas e seus efeitos. Muito útil para descobrir problemas de flags de vidraças do Squirredy.

A seguinte maneira de remover pontos de interrogação por padrão para todas as caixas de diálogo no aplicativo pode ser usada:

Anexe o seguinte filtro de eventos a QApplication Em algum lugar no início do seu programa:

  bool eventFilter (QObject *watched, QEvent *event) override
  {
    if (event->type () == QEvent::Create)
      {
        if (watched->isWidgetType ())
          {
            auto w = static_cast<QWidget *> (watched);
            w->setWindowFlags (w->windowFlags () & (~Qt::WindowContextHelpButtonHint));
          }
      }
    return QObject::eventFilter (watched, event);
  }

Não consegui encontrar um slot, mas você pode substituir o virtual winEvent função.

#if defined(Q_WS_WIN)
bool MyWizard::winEvent(MSG * msg, long * result)
{
    switch (msg->message)
    {
    case WM_NCLBUTTONDOWN:
        if (msg->wParam == HTHELP)
        {

        }
        break;
    default:
        break;
    }
    return QWizard::winEvent(msg, result);
}
#endif
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top