首页 > 编程语言 >qt 实现窗口置顶,qtdesigner创建的widget窗口集成程序里的用法

qt 实现窗口置顶,qtdesigner创建的widget窗口集成程序里的用法

时间:2025-01-10 15:13:24浏览次数:1  
标签:widget 窗口 parent param pdo ui active page 置顶

参考 https://blog.csdn.net/Larry_Yanan/article/details/123518788

.ui文件如下


新建的ui文件,编译一下就会生成对应的 ui_xxx.h 文件,文件内就有对应的 namespace Ui 声明的变量,这个变量要在mainwindow.h中声明,然后在mainwindow.cpp中new出来,具体使用如下

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>

namespace Ui {
class MainWindow;
class page_pdo;
class page_param;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    Ui::page_param *ui_page_param;
    Ui::page_pdo *ui_page_pdo;
    QWidget *parent_page_pdo;
    QWidget *parent_page_param;
    QWidget *parent_active=nullptr;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ui_page_pdo.h"
#include "ui_page_param.h"


#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    parent_page_pdo=new QWidget();
    parent_page_param=new QWidget();
    ui_page_param=new Ui::page_param;
    ui_page_pdo=new Ui::page_pdo;
    ui_page_param->setupUi(parent_page_param);
    ui_page_pdo->setupUi(parent_page_pdo);

    parent_page_pdo->setWindowTitle("parent_page_pdo");
    parent_page_param->setWindowTitle("parent_page_param");
    parent_page_param->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);//这种方式主界面还能编辑,加上主界面disable和定时监测,结合定时器监测可以实现警告提示
    parent_page_pdo->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
//    parent_page_param->setWindowModality(Qt::ApplicationModal);//这种方式,主界面无法修改,可以实现基本功能,但是无法实现警告提示
//    parent_page_pdo->setWindowModality(Qt::ApplicationModal);

    connect(ui->btn_skip_page_param,&QPushButton::clicked,this,[=]() mutable{
        if(parent_active)parent_active->hide();
        parent_page_param->show();
        parent_active=parent_page_param;
        this->setEnabled(false);
        //this->setWindowOpacity(0.5); // 设置窗口半透明
    });
    connect(ui->btn_skip_page_pdo,&QPushButton::clicked,this,[=]() mutable{
        if(parent_active)parent_active->hide();
        parent_page_pdo->show();
        parent_active=parent_page_pdo;
        this->setEnabled(false);
    });
    parent_active=nullptr;

    connect(ui_page_pdo->btn_cancel,&QPushButton::clicked,this,[=]() mutable{ this->setEnabled(true);parent_active=nullptr;parent_page_pdo->hide();qDebug() <<ui_page_pdo->data_1->text(); });
    connect(ui_page_pdo->btn_ok,&QPushButton::clicked,this,[=]() mutable{ this->setEnabled(true);parent_active=nullptr;parent_page_pdo->hide();qDebug() << ui_page_pdo->data_1->text(); });
    connect(ui_page_param->btn_cancel,&QPushButton::clicked,this,[=]() mutable{ this->setEnabled(true);parent_active=nullptr;parent_page_param->hide();qDebug() << ui_page_param->data_1->text(); });
    connect(ui_page_param->btn_ok,&QPushButton::clicked,this,[=]() mutable{ this->setEnabled(true);parent_active=nullptr;parent_page_param->hide();qDebug() << ui_page_param->data_1->text(); });

    QTimer* timerSendAnimCAN = new QTimer(this);
    connect(timerSendAnimCAN,&QTimer::timeout,this,[=]() mutable{
        QWidget *activeWindow = QApplication::activeWindow();
        if (activeWindow) { qDebug() << "Active window:" << activeWindow->windowTitle(); }
        if(parent_active){
            if (activeWindow==parent_active) {
                parent_active->setStyleSheet("");
            }
            else {
                QString res=QString("#%1{%2}").arg(parent_active->objectName()).arg("border:2 solid red;");
                parent_active->setStyleSheet(res);
            }
        }
    });
    timerSendAnimCAN->setTimerType(Qt::PreciseTimer);
    timerSendAnimCAN->start(100);
}

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

运行效果

标签:widget,窗口,parent,param,pdo,ui,active,page,置顶
From: https://www.cnblogs.com/RYSBlog/p/18664006

相关文章

  • 21. 主窗口控件
    一、主窗口控件  之前,我们使用可视控件创建具体的实例时都选择了一个父窗体,将控件放到这个窗体上,即使在创建实例时没有选择父窗体,也可以用控件的setParent()方法将控件放到父窗体上。如果一个控件没有放到任何窗体上,则这个控件可以单独成为窗口,并且可以作为父窗口来使用,可在......
  • qt qlistWidget和QListWidgetItem的使用
    mainwindow.ui如图,用到的元素比较简单,自己创建就可以mainwindow.h点击查看代码#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QFileDialog>#include<QDir>#include<QDebug>#include<QGridLayout>#include<QHBoxLayou......
  • 3298.统计重新排列后包含另一个字符串的字符串数目 I II滑动窗口 优化思路解析全网最
    II相比于I是数据范围变成了10的6次方了我们来维护大小关系,把不用的都去掉,优化到O(26n)首先判断一下要找子字符串的s长度是否小于t字符串,如果小于的话直接返回0初始答案变量和left左指针为0用Counter来记录t中所有字符出现次数(当然记录s字符串出现次数也是可以的)然后......
  • .NET 窗口置于最顶层的几种方法
    本文介绍如何将窗口置于最顶层,以及解决在顶层显示时对锁屏登录界面的影响等问题。用于实现类似Launcher、系统工具等应用需要窗口层级比Windows开始菜单以及置顶任务栏还要高的场景一般情况下的窗口置顶,可以设置WPF窗口属性Topmost=true也可以使用WIN32-SetWindowPos函数SetWin......
  • .NET 窗口置于最顶层
    本文介绍如何将窗口置于最顶层,以及解决在顶层显示时对锁屏登录界面的影响等问题。用于实现类似Launcher、系统工具等应用需要窗口层级比Windows开始菜单以及置顶任务栏还要高的场景一般情况下的窗口置顶,可以设置WPF窗口属性Topmost=true也可以使用WIN32-SetWindowPos函数SetWind......
  • Delphi窗口分割用splitter分割2个Panel
    在Delphi中放置两个Panel和一个Splitter组件,可以按照以下步骤操作:添加第一个Panel:在Form上添加一个Panel组件。设置第一个Panel的Align属性为alLeft(如果你希望垂直分割)或alTop(如果你希望水平分割)。添加Splitter组件:在Form上添加一个Splitter组件。设置Splitter的A......
  • Qt天气预报系统鼠标拖动窗口
    Qt天气预报系统1、鼠标拖动窗口1.1重写鼠标移动函数1.2添加定义1.3定义一个偏移值1.4判断鼠标左键是否被按下1.5计算当前鼠标位置与窗口左上角位置的偏移值1.6移动窗口2、.h文件和.cpp文件2.1.h文件2.2.cpp文件3、结论1、鼠标拖动窗口1.1重写鼠标移动函数protec......
  • Qt 写无边框窗口时,遇到的问题与解决方法
    一、无边框窗口问题/需求汇总:1、窗口最大化时闪屏、卡顿问题。2、鼠标左键可移动窗口,但只在窗口上下左右30以内区域可移动,其它地方不可移动。3、双屏幕时,窗口最大、向下还原需要在当前屏幕显示,不回到主屏幕。4、窗口正常显示时在屏幕中间区域。5、窗口最大化显示......
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之21 项目主页
    本文要点基于RESTful风格设计一个“为AI聊天工具添加一个知识树系统”的项目主页本项目(为AI聊天工具添加一个知识树系统)的主页页面的三个页面版块(注:一个项目的基础版本,它明确给出建模限制what(where,how)并悬置模型本身(内部空出模型--内建,留给内部--待建+持续增强)同......
  • chrome浏览器调试窗口如何设置深色背景主题
    前言大家好,我是小徐啊。chrome浏览器是我们常用的浏览器,在开发Java应用的时候,是经常需要用到的。而且,开发的时候,需要经常打开浏览器的调试模式,这个界面的默认主题是白色的,其实也可以设置成深色的主题,今天,小徐就来介绍下如何设置深色主题。如何设置深色主题首先,打开浏览器,然后鼠......