Qt:19.浮动窗口/子窗口(子窗口介绍、代码方式创建子窗口、设置子窗口标题、为子窗口添加控件、设置子窗口停靠位置)

目录

1.子窗口介绍:

2.代码方式创建子窗口:

3.设置子窗口标题:

4.为子窗口添加控件:

5.设置子窗口停靠位置。


1.子窗口介绍:

  • 在 Qt 中,可以创建和管理子窗口(子窗口体)以实现多窗口应用程序。

  • 子窗口可以是对话框、独立窗口或者 MDI(多文档界面)子窗口。

  • 通过QDockWidget类创建子窗口。

2.代码方式创建子窗口:

  • 创建子窗口对象:QDockWidget* dockWidget=new QDockWidget();
  • 将子窗口添加到主窗口:this->addDockWidget(Qt::LeftDockWidgetArea,dockWidget);

        

3.设置子窗口标题:

  • 设置子窗口标题:dockWidget->setWindowTitle("这是子窗口的标题");

        

4.为子窗口添加控件:

  • 为子窗口添加控件,不能直接给这个窗口设置子控件。
  • 首先要先创建一个单独的QWidget对象,然后将控件设置到这个QWidget对象中。
  • 再把这个QWidget对象设置到dockWidget中。
    //为dockWidget赋予QWidget对象
    QWidget* container=new QWidget();
    dockWidget->setWidget(container);
  • 由于一个dockWidget只能包含一个QWidget对象,所以要想新增控件,就还是要去QWidget对象中新增。
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QDockWidget* dockWidget=new QDockWidget();
    this->addDockWidget(Qt::LeftDockWidgetArea,dockWidget);

    dockWidget->setWindowTitle("这是子窗口的标题");

    //为dockWidget赋予QWidget对象
    QWidget* container=new QWidget();
    dockWidget->setWidget(container);

    //创建两个控件
    QLabel* label=new QLabel("这是一个label控件");
    QPushButton* pushButton=new QPushButton("这是一个按钮");

    //创建一个布局管理利器,并且设置到QWidget对象中
    QVBoxLayout* layout=new QVBoxLayout();
    container->setLayout(layout);
    
    //将两个控件添加到布局管理器中
    layout->addWidget(label);
    layout->addWidget(pushButton);

}

5.设置子窗口停靠位置。

  • 通过setAllowAreas(Qt::DockWidgetArea | Qt::DockWidgetArea)方法,设置允许停靠的位置。默认为Qt::LeftDockWidgetArea——左。
  • 可以设置四个位置,默认位置为上:
  • Qt::TopDockWidgetArea——上
  • Qt::BottomDockWidgetArea——下
  • Qt::LeftDockWidgetArea——左
  • Qt::RightDockWidgetArea——右
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当将主窗口设置为`Qt::WindowStaysOnTopHint`(始终置顶)时,可能会导致窗口(例如QComboBox)无法正常弹出。这是因为`Qt::WindowStaysOnTopHint`属性使得主窗口始终位于其他窗口之上,包括窗口。 解决这个问题的一种方法是,在需要使用`Qt::WindowStaysOnTopHint`属性的主窗口中,临时禁用该属性,以允许窗口正常弹出。当窗口关闭后,再恢复主窗口的`Qt::WindowStaysOnTopHint`属性。 以下是一个示例代码: ```cpp // 创建窗口 QMainWindow* mainWindow = new QMainWindow(parent); mainWindow->setWindowFlags(Qt::WindowStaysOnTopHint); // 创建窗口,例如QComboBox QComboBox* comboBox = new QComboBox(mainWindow); // 当需要弹出窗口时,禁用主窗口Qt::WindowStaysOnTopHint属性 QObject::connect(comboBox, QOverload<const QString&>::of(&QComboBox::activated), [=](const QString& text) { mainWindow->setWindowFlags(mainWindow->windowFlags() & ~Qt::WindowStaysOnTopHint); mainWindow->show(); // 延迟一段时间后恢复主窗口Qt::WindowStaysOnTopHint属性 QTimer::singleShot(100, [=]() { mainWindow->setWindowFlags(mainWindow->windowFlags() | Qt::WindowStaysOnTopHint); mainWindow->show(); }); }); // 后续代码... ``` 在上述示例中,我们通过连接QComboBox的`activated`信号,当需要弹出窗口时,临时禁用主窗口的`Qt::WindowStaysOnTopHint`属性,并在一定延迟后恢复该属性。这样,在用户触发窗口弹出操作时,主窗口将不会遮挡窗口。 请注意,这只是一种解决方案,并不是通用的解决方法。具体实现可能需要根据您的应用程序需求进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S+叮当猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值