我拼命在所谓简单的问题,未能获得在屏幕上的Qt窗口的位置和几何尺寸缩小时没有更新。我本来无意中发现这个问题在Python/PyQt context,但因为它追踪到的Qt本身,当用户使用任何顶部或左侧边缘或转角,即调整窗口大小不更新QWidget::pos()
特性,重新调整涉及的由来在左上角,因此position of the window。QWidget的POS()涉及源
以下的Qt/C++程序是最小重现该问题(名称作为Qt_test.cc
和建立与qmake -project Qt_test.cc; qmake; make
):
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QDebug>
class PrintingQWidget : public QWidget {
Q_OBJECT
public slots:
void print() {
qDebug() << pos() << width() << height();
}
};
#include "Qt_test.moc"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
PrintingQWidget window;
QPushButton btn("Print position", &window);
window.connect(&btn, SIGNAL(clicked()), SLOT(print()));
window.show();
return app.exec();
}
点击“打印位置”,以获得窗口的坐标,然后调整窗口使用顶部或左边缘,然后再次单击。在我的系统(MacOSX)上,QWidget :: pos()属性中的窗口位置未更新。我清楚地从documentation了解到,QWidget :: pos()应该总是产生窗口小部件左上角的坐标,但情况并非如此。
任何人都能够重现此问题?任何解决方法?
从链接的文档,它指出pos是相对父插件的位置,除非小部件是QWindow,在这种情况下,它会给桌面坐标。由于您尚未创建QWindow,但只是一个QWidget,它不会返回桌面位置,而是相对于其父级而不是桌面的位置。作为一种“解决方法”,创建一个窗口,添加按钮并获取窗口的位置。 – TheDarkKnight 2013-05-09 10:15:49
感谢您的线索。不过,看起来QWindow仅在Qt 5中可用。在Qt 4中,似乎没有父母的QWidgets只是成为窗口。我尝试了QMainWindow,但它的行为方式与它从QWidget继承相同。另外,pos()的坐标显然是桌面位置。它们只是在调整大小时不能正确更新。 – Stefan 2013-05-09 10:38:07
尝试widget-> mapToGlobal(widget-> pos()) – TheDarkKnight 2013-05-09 10:40:18