我在所谓的简单问题上拼命失败,无法在屏幕上获取 Qt 窗口的位置和几何形状。我最初在Python/PyQt 上下文中偶然发现了这个问题,但后来将其跟踪到 Qt 本身,QWidget::pos()
当用户使用任何顶部或左侧边缘或角调整窗口大小时,该属性不会更新,即调整涉及的大小左上角的原点,因此是 window 的位置。
以下 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() 属性中的窗口位置没有更新。我从文档中清楚地了解到QWidget::pos() 应该始终产生小部件左上角的坐标,但事实并非如此。
任何人都能够重现这个问题?任何解决方法?