尽管Qt's docs指出这两个函数是不同的(第一个函数不包括框架),但无论我选择什么小部件-包括应用程序的主窗口- someWidget->frameGeometry().height()总是返回与someWidget->geometry.height()相同的值。
这里我漏掉了什么?
发布于 2013-01-27 02:42:24
我认为,你没有给出足够的时间来绘制小部件。这里有几个例子:
#include <QApplication>
#include <QMainWindow>
#include <QDebug>
class MainWindow : public QMainWindow
{
public:
MainWindow() {
startTimer(500);
}
void timerEvent(QTimerEvent *e) {
// Here values are different
qDebug() << geometry().height() << frameGeometry().height();
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show();
// Here values are equals
qDebug() << mainWin.geometry().height() << mainWin.frameGeometry().height();
return app.exec();
}第一个调试输出将为geometry和frameGeometry生成相同的值,但第二个调试输出(在timerEvent中)将生成不同的值。
发布于 2013-01-27 02:41:22
例如,QWidget没有框架,但QFrame有框架。
发布于 2016-03-12 02:55:06
如果QWidget是顶层窗口,那么你可以看到它周围的边框和标题栏。我们称它为框架或装饰框架,frameGeometry()返回的确切内容是:窗口大小和位置,包括OS几何,另一侧几何() returs内部矩形,这可用于其他子控件或painting.See http://doc.qt.io/qt-4.8/application-windows.html#window-geometry更多details.Toplevel几何()/ frameGeometry()不同,如果我们的窗口不是无框架或全屏...或者我们正在讨论x11下的一些无框架的窗口管理器。
https://stackoverflow.com/questions/14540075
复制相似问题