【问题标题】:Qt Unable to set geometryQt无法设置几何
【发布时间】:2018-09-16 22:20:17
【问题描述】:

每次尝试打开新窗口或对话框时,我都会在 Qt 中收到关于设置几何图形的警告。它甚至发生在QDialogInput 上。而且我没有尝试设置几何图形,只是调用窗口已经给了我一个警告。这是一个例子:

main.cpp

QLineSeries *series = new QLineSeries();


for(int i=0;i<graphPoints;i++)
    series->append(i,(qrand()%5)+20);

QChart *chart = new QChart();
chart->legend()->hide();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("X vs Y teste");

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);

QDialog *graph = new QDialog(this);
QHBoxLayout *layout = new QHBoxLayout(graph);
layout->addWidget(chartView);
graph->setLayout(layout);
graph->exec();

警告:

setGeometry: Unable to set geometry 116x30+619+380 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry:  116x91+619+380 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 91x91, maximum size: 16777215x16777215).

这不是问题,直到最近我尝试使用setGeometry(200,200,200,200),但什么也没发生。

知道这可能是什么吗?

编辑

我做了一个非常简单的程序。 Ony 包括QInputDialog 并称为QInputDialog::getString()。示例如下:

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QInputDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QInputDialog::getText(this,"title","label");
}

MainWindow::~MainWindow()
{
    delete ui;
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

输出:

Starting C:\Users\socc\Documents\Qt\build-VerySimple-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\VerySimple.exe...
setGeometry: Unable to set geometry 116x30+100+105 on QWidgetWindow/'QInputDialogClassWindow'. Resulting geometry:  178x90+100+105 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 178x90, maximum size: 524287x90).
C:/Users/socc/Documents/Qt/build-VerySimple-Desktop_Qt_5_10_0_MinGW_32bit-Debug/debug/VerySimple.exe exited with code 0

【问题讨论】:

  • 如果有布局,例如:QHBoxLayout。布局中的小部件不能直接使用setGeometry
  • 那么如何使用布局设置几何图形?

标签: qt resize


【解决方案1】:

在实践中,此警告可能会在以下情况下显示:如果使用 ui 表单编辑器并且您手动拖动小部件,导致生成的几何图形在运行时无法适应屏幕,或者更一般地,当 小部件 几何体小于布局内容,这不是一个严重的问题,因为小部件会自动调整和正确渲染,但是可以通过确保小部件在渲染之前获得足够的空间来解决这个问题,这是通过调整它来完成的大小到内容,因此尝试:

graph->adjustSize();
graph->exec();

另一方面,虽然这个问题对我来说是不可重现的,graph-&gt;setGeometry(200,200,200,200); 但它只出现在 ((200,200,100,100),它可能是您的几何宽度/高度小于您的图表视图尺寸,请尝试调整将它们调整为更高的几何宽度/高度以适应您的图表。

【讨论】:

  • 抱歉耽搁了这么久。并且使用graph-&gt;adjustSize() 确实有效。但仍然无法设置几何。这也是使用 QDialogInput 的静态方法发生的吗?喜欢QDialogInput::getItem()?
  • 如果它只有这个代码有问题,那么是的,我可以在exec() 之前为对话框设置几何图形...尝试找到可能导致此问题的另一个原因代码
  • 我将用一个非常简单的问题示例进行编辑
【解决方案2】:

关于 Update 中的另一种情况,其中静态用于创建几乎没有信息的 window,请参阅 static public members .. 您没有设置 window 类型或任何对话框的其他提示。

没有嵌入到父窗口小部件中的窗口小部件称为窗口。 ... 也可以使用合适的方法创建没有这种装饰的窗口 window flags )

您需要将静态与显式窗口类型(例如:Qt::Popup)一起使用:

QInputDialog::getText(this,"title","label",QLineEdit::Normal,"",nullptr,Qt::Popup);

或窗口提示(例如Qt::MSWindowsFixedSizeDialogHint

QInputDialog::getText(this,"title","label",QLineEdit::Normal,"",nullptr,Qt::MSWindowsFixedSizeDialogHint);

【讨论】:

  • 我迟到了,但像 QColorDialog::getColor() 这样的其他静态变量没有这样的标志,并且会引发 setGeometry 警告消息
猜你喜欢
  • 2014-03-16
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多