Я считаю, что QMessageBox
корректирует размер в соответствии с заголовком окна, но по какой-то причине он также не работает в моей системе, не уверен, что это ошибка или функция, это делается в qmessagabox.cpp QMessageBoxPrivate::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);
надеюсь, это поможет, с уважением