2014-09-29 33 views
2

我實現了一個從QDialog繼承的定製QMessageBox。 (使用Qt 4.8.6)QMessageBox從何處獲取styleguide,font-size,...?

的問題是,現在所有的自定義消息框看起來完全不同於QMessageBox提示靜態函數:

  • QMessageBox提示::信息(...)
  • QMessageBox提示: :關鍵(...)
  • QMessageBox提示::問題(...)
  • QMessageBox提示::警告(...)

它們在大小,字體,字體大小,圖標,背景(靜態qmessageboxs有兩種背景顏色)等方面不同,...。

我唯一發現的是如何訪問操作系統特定的消息框圖標。

QStyle *style = QApplication::style(); 
QIcon tmpIcon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, this);//for QMessageBox::Information 

是否有類似的字體或整體風格。

我知道QMessagebox使用操作系統特定的風格指南。但我找不到它們。 您可以查看源代碼here

所以我的問題是如何使自定義QMessageBox從QDialog繼承看起來像靜態QMessageBox :: ...函數?

其實(如果我能訪問QMessageBox提示對象,在這種靜態函數調用,我可以讀出所有的樣式和字體參數創建的。但是,這是不可能的。)

回答

0

有點晚了,但今天我遇到了類似的問題,不涉及增加新的元素,但改變其中的一些。我的解決方案:使用QProxyStyle(Qt 5+)。它基本上允許您僅重新實現基本樣式的某些方面而無需完全重新實現它。如果您使用由QStyleFactory創建的樣式,特別有用。

這裏是覆蓋QMessageBox::information上的默認圖標的示例。

class MyProxyStyle : public QProxyStyle { 
public: 
    MyProxyStyle(const QString& name) : 
    QProxyStyle(name) {} 

    virtual QIcon standardIcon(StandardPixmap standardIcon, 
          const QStyleOption *option, 
          const QWidget *widget) const override { 
    if (standardIcon == SP_MessageBoxInformation) 
     return QIcon(":/my_mb_info.ico"); 
    return QProxyStyle::standardIcon(standardIcon, option, widget); 
    } 
}; 

然後樣式設置爲你的應用程序:

qApp->setStyle(new MyProxyStyle("Fusion")); 
0

,你可以做的事情它不創建您自己的自定義類。 QMessageBox提供了一組應該對您有用的方法。這是例如:

QMessageBox msgBox; 
msgBox.setText(text); 
msgBox.setWindowTitle(title); 
msgBox.setIcon(icon); 

msgBox.setStandardButtons(standardButtons); 
QList<QAbstractButton*> buttons = msgBox.buttons(); 
foreach(QAbstractButton* btn, buttons) 
{ 
    QMessageBox::ButtonRole role = msgBox.buttonRole(btn); 
    switch(role) 
    { 
     case QMessageBox::YesRole: 
      btn->setShortcut(QKeySequence("y")); 
     break; 
     case QMessageBox::NoRole: 
      btn->setShortcut(QKeySequence("n")); 
     break; 
    } 
} 
+0

我wannt添加勾選 「不再顯示此消息」 – user1911091 2014-09-29 11:19:54

+1

@ user1911091莫非['QErrorMessage'(HTTP:// QT -project.org/doc/qt-5/qerrormessage.html#static-public-members)爲你工作? – thuga 2014-09-29 11:46:43

+0

不,我們在整個應用程序中使用4個消息框(警告,問題,關鍵信息)。 也有類似操作系統的QErrorMessage風格嗎? – user1911091 2014-09-29 12:39:13