2008-09-17 144 views

回答

45

默認情況下,Qt :: WindowContextHelpButtonHint標誌被添加到對話框中。 您可以使用參數WindowFlags來控制此對話框構造函數。如果添加了的Qt :: WindowContextHelpButtonHint標誌你將得到幫助按鈕回來

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

例如,您可以通過做只指定TitleHintSystemMenu標誌。

在PyQt的你可以這樣做:在窗口標誌

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

更多細節可以在Qt文檔中WindowType enum找到。

+2

見下面rrwick的答案。如果你沒有的Qt :: WindowCloseButtonHint添加到您的標誌,你會禁用的關閉按鈕,默認情況下啓用。 – Dan 2015-01-12 21:54:49

+1

這裏是一個鏈接PyQt4中指定的窗口標誌,http://pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum如果你想關閉按鈕 – Barmaley 2015-06-09 20:43:53

+1

同時添加標誌'的Qt :: WindowCloseButtonHint`被激活。 – 2016-09-30 16:25:20

26

好的,我找到了一種方法來做到這一點。

它處理窗口標誌。所以這裏是我使用的代碼:

Qt::WindowFlags flags = windowFlags() 

Qt::WindowFlags helpFlag = 
Qt::WindowContextHelpButtonHint; 

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

但是通過這樣做,有時對話框的圖標被重置。所以要確保對話框的圖標不會改變,你可以添加兩行。

QIcon icon = windowIcon(); 

Qt::WindowFlags flags = windowFlags(); 

Qt::WindowFlags helpFlag = 
Qt::WindowContextHelpButtonHint; 

flags = flags & (~helpFlag); 

setWindowFlags(flags); 

setWindowIcon(icon); 
3

這裏列出的工作,但你自己回答這個問題的答案,我建議你運行該示例程序$QTDIR/examples/widgets/windowflags。這將允許您測試窗口標誌及其效果的所有配置。非常有用的搞清楚松鼠windowflags問題。

0

我找不到插槽,但您可以覆蓋虛擬winEvent函數。

#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 
8

我就遇到了這個問題,在Windows 7中,Qt的5.2,而工作最適合我的標誌組合是這樣的:

的Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint

這給了我一個工作關閉按鈕,但沒有問號幫助按鈕。只使用Qt :: WindowTitleHint或Qt :: WindowSystemMenuHint擺脫了幫助按鈕,但它也禁用了關閉按鈕。

正如Michael Bishop所建議的那樣,它正在使用windowflags例子來演示這種組合。謝謝!

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

通過以下方式默認情況下,在應用程序中所有的對話框中刪除問號可用於:

附上以下事件過濾器QApplication在程序開始的地方:

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); 
    } 
相關問題