我相信QMessageBox
不調整大小以適合窗口標題,但由於某些原因,它沒有我的系統上的工作權利也,不知道這是否是一個錯誤或功能,這是在qmessagabox.cppQMessageBoxPrivate::updateSize()
方法來完成。
我注意到的另一件事是,您正在使用QMessageBox
類的實例調用about()方法,該方法是靜態的,您可以使用類名稱QMessageBox::about(..)
來執行它。
你可以做什麼調整窗口的大小,創建自己的QMessageBox
的子類,並調整在showEvent方法窗口的最小寬度,請參見下面的示例的詳細信息:
class MyMessageBox : public QMessageBox
{
public:
explicit MyMessageBox(QWidget *parent = 0) : QMessageBox(parent) { }
MyMessageBox(const QString &title, const QString &text, Icon icon,
int button0, int button1, int button2,
QWidget *parent = 0,
Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint) :
QMessageBox(title, text, icon, button0, button1, button2, parent, f) { }
static void about(QString title, QString text)
{
MyMessageBox aboutBox(title, text, QMessageBox::Information, 0, 0, 0, NULL);
aboutBox.setText(title);
aboutBox.setText(text);
QIcon icon = aboutBox.windowIcon();
QSize size = icon.actualSize(QSize(64, 64));
aboutBox.setIconPixmap(icon.pixmap(size));
aboutBox.exec();
}
void showEvent(QShowEvent *event)
{
QMessageBox::showEvent(event);
QWidget *textField = findChild<QWidget *>("qt_msgbox_label");
if (textField != NULL)
{
// getting what ever my system has set for the window title font
QFont font = QFont("Ubuntu Bold", 11);
// you might want to make it more generic by detecting the actuall font
// or using smth like this:
//QFont font = QApplication::font("QWorkspaceTitleBar");
QFontMetrics fm(font);
int width = qMax(fm.width(windowTitle()) + 50, textField->minimumWidth());
textField->setMinimumWidth(width);
}
}
};
這裏是你如何可以稱之爲:
QString titleText("Some title which is slightly longer");
QString aboutText("Short about text");
MyMessageBox::about(titleText, aboutText);
希望這會有所幫助,至於 「QMessageBox提示」 的
您可能想要使用構造函數中的'Qt :: WindowFlags'標誌(http://doc.qt.nokia.com/4.7/qmessagebox.html#QMessageBox-2)。 – Donotalo 2011-04-07 14:52:42