QT设置窗口大小,但可以通过鼠标拖动修改
时间: 2024-12-16 12:21:15 浏览: 30
在Qt中,如果你想创建一个窗口并且允许用户通过鼠标拖动调整其大小,你可以使用`QMainWindow`或者`QWidget`的子类,并在设计布局的时候添加一些灵活性。通常,你可以设置窗口的大小限制,或者使用无边框窗口(`setWindowFlags(Qt::FramelessWindowHint)`),然后利用`resizeEvent()`和`mouseMoveEvent()`这样的事件处理函数来响应窗口大小的变化。
以下是一个简单的例子:
```cpp
class ResizableWindow : public QMainWindow {
public:
ResizableWindow(QWidget *parent = nullptr)
: QMainWindow(parent) {
setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint); // 允许窗口无边框并自定义
setMinimumSize(200, 200); // 设置最小尺寸
}
private slots:
void resizeEvent(QResizeEvent *event) {
// 防止用户将窗口大小缩小到不允许的范围
if (event->size().width() < minWidth || event->size().height() < minHeight) {
event->acceptSize(minSize());
} else {
event->accept();
}
}
void mouseMoveEvent(QMouseEvent *event) {
// 如果鼠标左键按下并移动,可以调整窗口位置
if (event->button() == Qt::LeftButton && event->modifiers() == Qt::NoModifier) {
move(event->globalPos() - pos()); // 移动窗口到鼠标位置
}
}
signals:
void windowResized();
protected:
int minWidth, minHeight; // 根据需要设置的最小窗口大小
void paintEvent(QPaintEvent *) override {}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
ResizableWindow window;
window.resize(minWidth, minHeight); // 初始化窗口大小
connect(&window, &ResizableWindow::windowResized, this, []() { qDebug() << "Window resized"; }); // 监听窗口大小变化
window.show();
return app.exec();
}
```
在这个例子中,当窗口大小改变时会触发`windowResized`信号,你可以在外部连接这个信号来获取窗口的新大小。
阅读全文