• 04.Qt核心窗口基类QWidget


    一、创建vs项目调用QWidget显示和隐藏并演示线程中调用槽函数的错误

    #include 
    #include 
    #include 
    
    static QWidget* w = nullptr;
    
    class XThread : public QThread
    {
    public:
        void run()
        {
            w->show();
        }
    };
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        w = new QWidget();
        XThread xt;
        xt.start();
        w->show();
        return a.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    子线程中调用主线程(UI)线程的控件,导致控件报错,不能这样写。

    二、创建QWidget的子类添加支持信号槽的宏connect函数绑定信号槽

    子线程中可以通过信号触发主线程(UI)的槽函数??ps:好像没太整明白

    main.cpp

    #include 
    #include 
    #include "XWidget.h"
    #include 
    
    static XWidget* w = nullptr;
    
    class XThread : public QThread
    {
    public:
        void run()
        {
            QThread::msleep(3000);
            w->Hide();
        }
    };
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        w = new XWidget();
        XThread xt;
        xt.start();
        w->show();
        return a.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    XWidget.h

    #pragma once
    #include 
    class XWidget :public QWidget
    {
    	Q_OBJECT
    
    public:
    	XWidget();
    	virtual ~XWidget();
    
    signals:
    	void Hide();
    
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    XWidget.cpp

    #include "XWidget.h"
    
    XWidget::XWidget()
    {
    	connect(this, SIGNAL(Hide()), this, SLOT(hide()));
    }
    
    XWidget::~XWidget()
    {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、QWidget窗口样式设置无边框最大化最小化关闭按钮定义

    去除界面边框和标题栏
    this->setWindowFlags(Qt::FramelessWindowHint);

    去除最小化按钮和最大化按钮
    this->setWindowFlag(WindowMinimizeButtonHint, false);
    this->setWindowFlag(WindowMaximizeButtonHint, false);

    标题栏保留,去除所有按钮
    this->setWindowFlags(WindowTitleHint | CustomizeWindowHint);

    WindowTitleHint:
    WindowTitleHint 是Qt框架中的一个窗口属性,它用于控制窗口标题栏的行为。
    将 WindowTitleHint 可以使用它来指定窗口标题栏是否显示、标题栏的按钮(最小化、最大化、关闭按钮)是否可见等。
    通常情况下,如果不设置 WindowTitleHint 或将其设置为默认值,窗口将具有标准的标题栏。

    CustomizeWindowHint:
    CustomizeWindowHint 也是Qt框架中的一个窗口属性,它用于启用或禁用自定义窗口边框和标题栏的功能。
    启用 CustomizeWindowHint 时,它允许自定义窗口的外观,包括去掉标题栏或者添加自定义按钮等。
    将 CustomizeWindowHint 设置为了窗口属性,这意味着您允许自定义窗口的外观。

    只有关闭按钮
    this->setWindowFlags(WindowCloseButtonHint);

  • 相关阅读:
    集合:(ArrayList)的插值和去重,包含(Iterator和listIterator)迭代器相关使用
    mac安装java
    golang 在 Mac、Linux、Window 下交叉编译
    大学生HTML作业节日网页 HTML作业节日文化网页期末作业 html+css+js节日网页 HTML学生节日介绍 HTML学生作业网页视频
    css 占位隐藏
    单调栈题目:移掉 K 位数字
    pmp新考纲全真模拟题,提分敏捷+情景
    【广州华锐互动】VR动物医学实验平台采用互动式教学,提高学生学习兴趣
    记一次企业微信的(CorpID)和密钥(Secret)泄漏的利用案例
    Codeforces Round 949 (Div. 2 ABCD) 视频讲解
  • 原文地址:https://blog.csdn.net/zzyzxb/article/details/133179128