• 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);

  • 相关阅读:
    基于PETALINUX的以太网调试
    爱了爱了,20个好用到爆的 Python 函数
    第十四届蓝桥杯模拟赛(第二期)
    box-shadow单边阴影设置
    MySQL之导入导出&视图&索引&执行计划
    Verilog HDL语言基础知识
    学生用台灯什么光对眼睛好?分享暖白光的学生护眼台灯
    一天销量200万,国产5G手机20天才200万,挑战iPhone也就想想罢了
    如何选择高频器件功分器和耦合器的PCB材料
    JUC并发编程第八篇,谈谈你对CAS的理解?自旋锁,CAS底层原理和存在的问题?
  • 原文地址:https://blog.csdn.net/zzyzxb/article/details/133179128