需求
对QMessageBox进行尺寸定制。
截图,定制前
截图,定制后
原因
原因:QMessageBox::showEvent() 强制将其大小改变成了QT认为比较合适的大小。
要改变它的大小可使用下面这种方法:
class MyMessageBox : public QMessageBox { ... protected: void showEvent(QShowEvent* event) { QMessageBox::showEvent(event); setFixedSize(640, 480); } };
实际检验无效,重载resizeEvent才有效果,重载的代码如下:
mymessagebox.h
#ifndef MYMESSAGEBOX_H #define MYMESSAGEBOX_H #include <QWidget> #include <QMessageBox> #include <QResizeEvent> class MyMessageBox : public QMessageBox { Q_OBJECT public: explicit MyMessageBox(QWidget *parent = 0); void setMySize(int width, int height); signals: public slots: protected: void resizeEvent(QResizeEvent *event); private: int _width; int _height; }; #endif // MYMESSAGEBOX_H
mymessagebox.cpp
#include "mymessagebox.h" MyMessageBox::MyMessageBox(QWidget *parent) : QMessageBox(parent), _width(0), _height(0) { } void MyMessageBox::setMySize(int width, int height) { _width = width; _height = height; } void MyMessageBox::resizeEvent(QResizeEvent *event) { setFixedSize(_width, _height); }