• 4939阅读
  • 5回复

[提问]qt窗口何时确定其大小 [复制链接]

上一主题 下一主题
离线qfmeal
 

只看楼主 倒序阅读 楼主  发表于: 2014-12-08
为了适应不同屏幕,窗口中使用了布局
我想在窗口显示之前获取其将要显示的大小是多少?

没有什么方法?
比如获取什么信号,或者重写该控件的某个方法,求指教!
离线dosmlp

只看该作者 1楼 发表于: 2014-12-08
    this->height();
    this->width();
离线dbzhang800

只看该作者 2楼 发表于: 2014-12-08
显示之前,在showEvent() 中可以获取大小
离线qfmeal

只看该作者 3楼 发表于: 2014-12-08
刚才看了下showevent,但是知不知道怎么用:
  1. class Q_GUI_EXPORT QShowEvent : public QEvent
  2. {
  3. public:
  4.     QShowEvent();
  5.     ~QShowEvent();
  6. };
代码是这样写的:
Show = 17,                              // widget is shown   我觉得这个注释的意思是当事件是17时,窗口已经显示完毕了。
于是写了这样的代码:

  1. void Dialog::showEvent(QShowEvent * event)
  2. {
  3.     if( QEvent::Show == event->type() )
  4.     {
  5.         emit sigWidgetHasShown(  );
  6.     }
  7.     return QDialog::showEvent( event );
  8. }
  9. void Dialog::getRealSize()
  10. {
  11.     QSizeF size = this->size();
  12.     qDebug()<<size;
  13. }
其中信号sigWidgetHasShown是自己定义的。
结果发现
getRealSize确实被调用了。但是弹出如下警告:
QSizeF(100, 30)
setGeometry: Unable to set geometry 100x30+910+484 on QWidgetWindow/'DialogClassWindow'. Resulting geometry:  116x30+910+484 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).

所以我觉得我的用法是错的,请版主指点,谢谢。



离线dbzhang800

只看该作者 4楼 发表于: 2014-12-09
这个Warning 和你这儿的代码无关,忽略即可。
离线eric584930

只看该作者 5楼 发表于: 2015-03-04
showMaximized();
int w = this->width();
int h = this->height();
生活就是这样
快速回复
限100 字节
 
上一个 下一个