我拼命在所謂簡單的問題,未能獲得在屏幕上的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