• 27828阅读
  • 6回复

怎样设置QMessageBox大小,弹出位置,急求!!!! [复制链接]

上一主题 下一主题
离线feier1029
 
只看楼主 正序阅读 楼主  发表于: 2010-03-04
— 本帖被 午小夜 执行加亮操作(2010-03-18) —
要求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会出现负值。但这些本来就不该出现负值的,问怎么可以解决?

离线bluesky0318

只看该作者 6楼 发表于: 2016-07-20
静态方法回复的好丑,还是要找到好的解决办法
离线xlttap

只看该作者 5楼 发表于: 2010-03-18
你直接用QMessageBox::question()或QMessageBox::information()等静态方法就可以了。
我简单我快乐
离线hehui

只看该作者 4楼 发表于: 2010-03-18
设置parent后弹出的窗口相对其父窗口居中~~~~~
离线feier1029
只看该作者 3楼 发表于: 2010-03-04
回三楼:
试过了,还是不行,在msg->exec()后,还是无效
离线午小夜

只看该作者 2楼 发表于: 2010-03-04
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);
}
};
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线banyibanyi

只看该作者 1楼 发表于: 2010-03-04
this->setGeometry试一试
快速回复
限100 字节
 
上一个 下一个