标题:怎样设置QMessageBox大小,弹出位置,急求!!!!
作者:feier1029
日期:2010-03-04 10:07
内容:
要求messageBox每次弹出都在主窗口中央,但是现在发现用系统提供的QMessageBox会随机的出现位置不在中央的时候。于是决定认为指定位置弹出messageBox。思路如下:
建立一个全局变量保存主窗口的frameGeometry(),在resizeEvent和moveEvent中,改变frameGeometry()。然后在相应要弹出messageBox的类中,构造messageBox:
QMessageBox *msg = new QMessageBox(parent);
msg -> setIcon();
msg -> setWindowTitle();
msg -> setText();
msg ->addButton();
msg ->move(pos);//指定弹出位置,Pos可以由frameGeometry()得到。
switch(msg->exec())
{
//此时可以检验弹出位置
}
目前存在的问题,1、如果设置msg->setFixedSize(),不起作用。求怎样设置其大小。
2、在resizeEvent和moveEvent里面,有时得出的frameGeometry是错误的,比如得到的x、y坐标和frameWidth、height会出现负值。但这些本来就不该出现负值的,问怎么可以解决?
#1 [banyibanyi 03-04 10:32]
this->setGeometry试一试
#2 [午小夜 03-04 11:01]
Looks like QMessageBox::showEvent() forces it to fixed size according to various factors. One ugly way to work it around is:
class MyMessageBox : public QMessageBox
{
protected:
void showEvent(QShowEvent* event) {
QMessageBox::showEvent(event);
setFixedSize(640, 480);
}
};
#3 [feier1029 03-04 11:16]
回三楼:
试过了,还是不行,在msg->exec()后,还是无效
#4 [hehui 03-18 09:11]
设置parent后弹出的窗口相对其父窗口居中~~~~~
#5 [xlttap 03-18 15:21]
你直接用QMessageBox::question()或QMessageBox::information()等静态方法就可以了。