QT 子窗口打开位置在主窗口位置处

//把主窗体几何位置给子窗体
 child->setGeometry(this->geometry());
 
### 实现主窗口打开窗口Qt 中实现从主窗口打开窗口的功能涉及多个方面,包括创建不同类型的窗口以及设置信号和槽来管理这些窗口之间的交互。 #### 创建 MainWindow 类 为了启动应用程序并提供一个入口点,定义 `MainWindow` 类继承自 `QWidget` 或者更常见的 `QMainWindow`。这个类负责初始化界面组件,并理用户触发的动作,比如按下按钮时打开新的对话框[^2]。 ```cpp // mainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "inputdialog.h" #include "displaywindow.h" class QPushButton; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private slots: void openInputDialog(); private: InputDialog* inputDialog; }; #endif // MAINWINDOW_H // mainWindow.cpp #include "mainwindow.h" #include <QPushButton> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), inputDialog(new InputDialog(this)) { setWindowTitle(tr("Main Window")); QPushButton *openButton = new QPushButton(tr("&Open Dialog"), this); connect(openButton, SIGNAL(clicked()), SLOT(openInputDialog())); } ``` 上述代码展示了如何构建基本的主窗口结构,并通过连接按钮点击事件到特定的方法 (`openInputDialog`) 来响应用户的操作。 #### 打开窗口实例化过程 当用户点击按钮后,会调用 `openInputDialog()` 方法,在该方法内部可以创建一个新的窗口对象(例如 `InputDialog`),并通过其成员函数 `.exec()` 显示模态对话框;如果是非模态,则可以直接使用 `.show()` 函数[^1]。 ```cpp void MainWindow::openInputDialog(){ int result = inputDialog->exec(); // 对于模式对话框 // or simply call show() for non-modal dialog // inputDialog->show(); if(result == QDialog::Accepted){ qDebug()<<"User accepted the dialog"; } } ``` 这段代码说明了两种不同的方式来呈现窗口——既可以是阻塞当前线程直到关闭为止的方式(`.exec()`),也可以是非阻塞式的(.show()). #### 窗口显示与隐藏逻辑 对于某些情况下希望仅改变现有窗口可见性的场合,可以在适当的地方调用相应的 API 如 .hide(), .setVisible(bool visible) 等来进行控制。另外一种情况是在父级窗口接收到鼠标单击消息之后判断光标所在位置是否位于某个特定区域之外从而决定要不要让某几个窗口消失不见[^5]: ```cpp if (event->button() == Qt::LeftButton) { // 检测窗口是否显示,如果显示并且点击位置窗口外面则隐藏窗口 if (!setting_window.geometry().contains(mapFromGlobal(QCursor::pos())) && !setting_window.isHidden()){ setting_window.hide(); } } ``` 此片段实现了基于鼠标的动作自动调整窗口能见度的行为.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值