在 QWidget 上启用调整大小
Enable resizing on QWidget
我想要使用 Qt 在 QWidget
中调整大小的功能,如下图所示。
我试过以下方法:
使用 QSizeGrip
、setSizeGripEnabled
为了完整起见,我展示了两个示例:使用和不使用 Qt Designer。
使用 Qt Designer 的示例
检查 sizeGripEnabled
属性:
从 Qt Designer 中预览(表单 > 预览...):
显示对话框的最小应用程序:
#include <QtWidgets/QApplication>
#include <QDialog>
#include "ui_DialogButtonBottom.h"
class Dialog : public QDialog {
public:
Dialog(QWidget* parent = nullptr) :
QDialog(parent) {
ui.setupUi(this);
}
private:
Ui::Dialog ui;
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Dialog dlg;
return dlg.exec();
}
结果
没有 Qt Designer
#include <QtWidgets/QApplication>
#include <QDialog>
class Dialog : public QDialog {
public:
Dialog(QWidget* parent = nullptr) :
QDialog(parent) {
setWindowTitle("Example");
setSizeGripEnabled(true);
}
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Dialog dlg;
return dlg.exec();
}
结果
更新以包含无框模式
添加 Frameless windows 提示不会改变任何东西:它工作正常。显然,没有框架,因此 windows 管理器提供的 resize/move 方法不可用。
#include <QtWidgets/QApplication>
#include <QDialog>
class Dialog : public QDialog {
public:
Dialog(QWidget* parent = nullptr, Qt::WindowFlags flags = 0) :
QDialog(parent, flags) {
setWindowTitle("Example");
setSizeGripEnabled(true);
}
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Dialog dlg(nullptr, Qt::FramelessWindowHint); // frameless
return dlg.exec();
}
结果
由于所有选项都可以直接使用,我建议您仔细检查您的 code/UI 设计以设置 maximum/minimum 大小(如果两者相同,手柄仍然会可用但根本不会改变尺寸)。
我想要使用 Qt 在 QWidget
中调整大小的功能,如下图所示。
我试过以下方法:
使用 QSizeGrip
、setSizeGripEnabled
为了完整起见,我展示了两个示例:使用和不使用 Qt Designer。
使用 Qt Designer 的示例
检查 sizeGripEnabled
属性:
从 Qt Designer 中预览(表单 > 预览...):
显示对话框的最小应用程序:
#include <QtWidgets/QApplication>
#include <QDialog>
#include "ui_DialogButtonBottom.h"
class Dialog : public QDialog {
public:
Dialog(QWidget* parent = nullptr) :
QDialog(parent) {
ui.setupUi(this);
}
private:
Ui::Dialog ui;
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Dialog dlg;
return dlg.exec();
}
结果
没有 Qt Designer
#include <QtWidgets/QApplication>
#include <QDialog>
class Dialog : public QDialog {
public:
Dialog(QWidget* parent = nullptr) :
QDialog(parent) {
setWindowTitle("Example");
setSizeGripEnabled(true);
}
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Dialog dlg;
return dlg.exec();
}
结果
更新以包含无框模式
添加 Frameless windows 提示不会改变任何东西:它工作正常。显然,没有框架,因此 windows 管理器提供的 resize/move 方法不可用。
#include <QtWidgets/QApplication>
#include <QDialog>
class Dialog : public QDialog {
public:
Dialog(QWidget* parent = nullptr, Qt::WindowFlags flags = 0) :
QDialog(parent, flags) {
setWindowTitle("Example");
setSizeGripEnabled(true);
}
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Dialog dlg(nullptr, Qt::FramelessWindowHint); // frameless
return dlg.exec();
}
结果
由于所有选项都可以直接使用,我建议您仔细检查您的 code/UI 设计以设置 maximum/minimum 大小(如果两者相同,手柄仍然会可用但根本不会改变尺寸)。