国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實現(xiàn)Qwidget窗口填滿整個主窗口,并跟隨鼠標的拖動自動縮放

這篇具有很好參考價值的文章主要介紹了實現(xiàn)Qwidget窗口填滿整個主窗口,并跟隨鼠標的拖動自動縮放。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)Qwidget窗口填滿整個主窗口,并跟隨鼠標的拖動自動縮放

新建一個窗口,我想在這個窗口上放一個QWidget,并且這個QWidget能夠布滿整個窗口,還可以隨著隨鼠標的拖動自動縮放

1、首先給大家介紹一個好用的組件庫:qt-material-widgets

(1)開源地址(基于QWidgets)

https://github.com/laserpants/qt-material-widgets

基于Qt Quick(QML)可以參考以下開源項目:

https://github.com/uwerat/qskinny

(2)靜態(tài)庫文件準備

  • 先把項目的源碼clone 下來,然后雙擊qt-material-widgets.pro 使用Qt creator打開
  • 構(gòu)建Debug生成靜態(tài)庫文件 libcomponents.a 路徑(build-qt-material-widgets-Desktop_Qt_5_15_2_MinGW_64_bit-Debug\components\debug\libcomponents.a)
  • 在你的項目里新建文件夾 sdk/material/staticLib
  • 把libcomponents.a復(fù)制到 sdk/material/staticLib/libcomponents.a 下面;
  • 把源碼的components文件夾整體復(fù)制到sdk/material下面;(注意:components文件夾是clone下來源碼的qt-material-widgets\components)

(3)在項目中引入庫

  • qmake方式 .pro

    #MaterialSDK
    LIBS += $$PWD/sdk/material/staticLib/libcomponents.a
    INCLUDEPATH += $$PWD/sdk/material/components
    PRE_TARGETDEPS += $$PWD/sdk/material/staticLib/libcomponents.a
    
  • CMake方式 CmakeLists.txt

    add_library(
        libcomponents 
        STATIC
        IMPORTED
    )
     set_target_properties(
        libcomponents
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/src/SDK/Material/lib/libcomponents.a
    )
    
    target_link_libraries(${PROJECT_NAME} PRIVATE libcomponents)
    
    
2、在main.cpp中引入qss文件:
#include "material.h"

#include <QApplication>
#include <QFile>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // 引入qss文件
    QFile file(":/style/style.qss");
    if ( file.exists() ) {
        // 以只讀的方式打開
        file.open(QFile::ReadOnly);
        // 以字符串的方式保存讀出的結(jié)果
        QString styleSheet = QLatin1String(file.readAll());
        // 設(shè)置全局樣式
        qApp->setStyleSheet(styleSheet);
        // 關(guān)閉文件
        file.close();
    }
    // 初始化一個material窗口
    Material material;
    // 顯示主窗口
    material.show();
    return app.exec();
}

style.qss文件內(nèi)容如下,給mainWidget加個背景色,便于觀察變化

#mainWidget {
  background-color: red;
}

3、新建 material.h文件,內(nèi)容如下:
#ifndef MATERIAL_H
#define MATERIAL_H

#include <QWidget>
#include <qtmaterialtoggle.h>

QT_BEGIN_NAMESPACE
namespace Ui { class Material; }
QT_END_NAMESPACE

class Material : public QWidget
{
    Q_OBJECT

public:
    Material(QWidget *parent = nullptr);
    ~Material();

private:
    Ui::Material *ui;

protected:
    /* 1、將函數(shù)聲明為virtual的作用是允許這兩個函數(shù)在派生類中被重寫(override),
     * 因為resizeEvent()和moveEvent()是QWidget類中的虛函數(shù),因此在派生類中也要將其聲明為virtual,
     * 這樣就可以在派生類中重新定義這兩個函數(shù),以實現(xiàn)派生類中對窗口大小改變和窗口移動事件的處理 
     */
    virtual void resizeEvent(QResizeEvent *event);
    virtual void moveEvent(QMoveEvent *event);

private:
    QWidget *mainWidget; // 1、添加mainWidget成員變量


};
#endif // MATERIAL_H

4、新建 material.cpp文件,內(nèi)容如下:
#include "material.h"
#include "ui_material.h"

#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>

Material::Material(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Material)
{
    ui->setupUi(this);

    // 使用Material-widgets
    QtMaterialToggle *switchToggle = new QtMaterialToggle();
    //switchToggle->setGeometry(50, 50, 164, 96);

    // 1、創(chuàng)建一個mainWidget容器,放到Material窗口上
    mainWidget = new QWidget(this);
    // 設(shè)置 objectName 屬性,QSS 文件中使用 #objectName 來定位到該控件
    mainWidget->setObjectName("mainWidget");
    // 設(shè)置mainWidget的大小策略,就是當窗口大小變化時,mainWidget怎么調(diào)整自己的大小,第一個參數(shù)是水平方向上的策略,第二個參數(shù)是垂直方向上的策略
    mainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    // 設(shè)置mainWidget容器的大小和位置
    mainWidget->setGeometry(0, 0, width(), height());


    // Qt中設(shè)置窗體大小的方法
    // 設(shè)置它的最大窗口值和最小窗口值,并且使最大值和最小值相等,窗口的最大化按鈕將變得不可用
    // mainWidget->setMinimumSize(200, 200);
    // mainWidget->setMaximumSize(200, 200);
    // 后來發(fā)現(xiàn)還有一個方法就是 resize,在構(gòu)造函數(shù)中直接調(diào)用他設(shè)置大小就可以
    //mainWidget->resize( QSize( 1128, 761 ));
  
    // 在mainWidget上創(chuàng)建一個垂直布局,下面的2種方法都可以
    // mainWidget->setLayout(layout);
    QHBoxLayout *layout = new QHBoxLayout(mainWidget);
    QPushButton *button1 = new QPushButton("按鈕1");
    QPushButton *button2 = new QPushButton("按鈕2");

    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(switchToggle);

    layout->setSpacing(60);  // 設(shè)置部件間距為60像素
    // Qt::AlignLeft    水平方向靠左
    // Qt::AlignRight   水平方向靠右
    // Qt::AlignHCenter 水平方向居中
    // Qt::AlignTop     垂直方向靠上
    layout->setAlignment(Qt::AlignCenter);

    //有時候會想讓我們的程序窗體固定大小,而該大小是我們在編輯時的大小
    //int width = this->geometry().width();   // 找到該窗體的物理大小
    //int height = this->geometry().height();
    //this->setFixedSize(width,height);       //設(shè)置窗體固定大小

    // 設(shè)置窗口的大小,微信PC應(yīng)用是1138x761
    // 設(shè)置它的最大窗口值和最小窗口值,并且使最大值和最小值相等,窗口的最大化按鈕將變得不可用
    // this->setMinimumSize(1128, 761);
    // this->setMaximumSize(1128, 761);
    // 后來發(fā)現(xiàn)還有一個方法就是 resize。在構(gòu)造函數(shù)中直接調(diào)用他設(shè)置大小就可以
    //this->resize( QSize( 1128, 761 ));

    this->setWindowTitle("QWidget布局");
}

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

/* 2、如果要實現(xiàn)widget窗口跟隨鼠標拖動并自動跟隨窗口縮放,
 * 需要在QWidget類中重寫resizeEvent()函數(shù)和moveEvent()函數(shù)
 */
// 在resizeEvent()函數(shù)中,重新設(shè)置widget窗口的大小和位置
void Material::resizeEvent(QResizeEvent *event)
{
    QWidget::resizeEvent(event); // 調(diào)用父類的resizeEvent()函數(shù)
    if(this->mainWidget) // 判斷是否有widget被添加到Material窗口中
    {
        // 獲取Material窗口的大小
        int w = this->width();
        int h = this->height();
        // 設(shè)置widget的大小為Material窗口的大小
        this->mainWidget->setGeometry(0, 0, w, h);
    }
}

// 在moveEvent()函數(shù)中,重新設(shè)置widget窗口的位置
void Material::moveEvent(QMoveEvent *event)
{
    QWidget::moveEvent(event);
    if(this->mainWidget)
    {
        this->mainWidget->move(0, 0);
    }
}



5、效果展示
實現(xiàn)Qwidget窗口填滿整個主窗口,并跟隨鼠標的拖動自動縮放

6、完成文章來源地址http://www.zghlxwxcb.cn/news/detail-497172.html

到了這里,關(guān)于實現(xiàn)Qwidget窗口填滿整個主窗口,并跟隨鼠標的拖動自動縮放的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Qt之格柵布局(QGridLayout)控件填滿整個單元格

    Qt之格柵布局(QGridLayout)控件填滿整個單元格

    Qt專欄: 目錄 1.現(xiàn)象1 2.解決方案 3.現(xiàn)象2 4.解決方案 5.總結(jié) ? ? ? ? 今天在用QGridLayout布局的時候,添加到布局的QWidget有文本框、標簽、組合框和按鈕等等,布局兩列,通過下面的方式添加進去的: 發(fā)現(xiàn)在窗口拉伸的時候,pEdit 不會填滿第0行1列的位置,右邊有空隙。 ???

    2024年04月15日
    瀏覽(65)
  • 【Qt】Qt無邊框窗口(鼠標點擊自定義標題欄)可拖動

    【Qt】Qt無邊框窗口(鼠標點擊自定義標題欄)可拖動

    隱藏掉標題欄后,默認情況下窗口無法被鼠標拖動的,需要自己處理鼠標事件,移動窗口達到拖動效果,但是又不想要鼠標點擊整個窗口都可以拖動,只需要鼠標點擊自定義的標題欄時可拖動 具體步驟如下: 類外初始化 通過鼠標點擊事件,判斷鼠標是否在標題欄,如果是,

    2024年02月12日
    瀏覽(21)
  • QT`實現(xiàn)鼠標超時未點擊,窗口自動關(guān)閉

    QT 實現(xiàn)鼠標超時未點擊,窗口自動關(guān)閉 前言 有的時候我們需要某些窗口實現(xiàn)超時自動關(guān)閉,但是Qt窗口一般是多部件堆疊而成,如果常規(guī)處理,對每一個部件進行鼠標點擊事件處理顯然不太合理,我個人參考了網(wǎng)上前輩的處理方法,通過直接重新實現(xiàn) QApplication::notify 函數(shù)來

    2024年02月10日
    瀏覽(24)
  • Qt QWidget 抗鋸齒圓角窗口的一個實現(xiàn)方案(支持子控件)

    Qt QWidget 抗鋸齒圓角窗口的一個實現(xiàn)方案(支持子控件)

    由于 QWidget::setMask 接口設(shè)置圓角不支持抗鋸齒,所以通常會使用透明窗口加圓角背景,但圓角背景不能滿足對子控件的裁剪,子控件與圓角區(qū)域重疊的部分還是能顯示出來。當然對于大多數(shù)窗口,留出足夠的邊距也是可以接受。 對一些特殊場景,比如QComboBox的列表框,UI設(shè)計

    2023年04月24日
    瀏覽(39)
  • 純css實現(xiàn)3D鼠標跟隨傾斜

    純css實現(xiàn)3D鼠標跟隨傾斜

    老規(guī)矩先上圖 為什么今天會想起來整這個呢?這是因為和我朋友吵架, 就是關(guān)于這個效果的,就是這個 卡片懸停毛玻璃效果, 我朋友認為純css也能寫, 我則坦言他就是在放狗屁,這種跟隨鼠標的3D效果要怎么可能能用純css寫, 然后吵著吵著發(fā)現(xiàn),欸,好像真能用css寫哦,我以前還寫過這

    2024年02月08日
    瀏覽(32)
  • Python 實現(xiàn)鼠標拖動截圖

    Python 實現(xiàn)鼠標拖動截圖

    此功能由3個.py文件實現(xiàn),分別為:test00.py、screenshot.py、py_tool.py;實現(xiàn)鼠標附近局部放大,未截圖部分半透明,鼠標控制鍵盤精準截圖,鼠標框選后自動保存截圖,按下esc鍵退出截圖;

    2024年02月14日
    瀏覽(34)
  • Python實現(xiàn)鼠標拖動的監(jiān)視

    目錄 模塊準備 具體步驟? 設(shè)置監(jiān)視函數(shù) 調(diào)用監(jiān)視器 注意 結(jié)束語 這是用來監(jiān)視鼠標的,pynput模塊中還有監(jiān)視鍵盤的。 ????????首先,設(shè)置一個全局變量,這個全局變量是用來記錄鼠標按下和釋放的 設(shè)置監(jiān)視函數(shù) ????????注:這里 on_click 函數(shù)里面有四個參數(shù),你可以

    2024年02月12日
    瀏覽(22)
  • html+css+js實現(xiàn)小紅點跟隨鼠標移動
  • CSS實現(xiàn)鼠標跟隨 3D 旋轉(zhuǎn)效果,讓交互活起來

    CSS實現(xiàn)鼠標跟隨 3D 旋轉(zhuǎn)效果,讓交互活起來

    一淘模板(56admin.com)給大家介紹一下如何使用CSS實現(xiàn)有意思的鼠標跟隨 3D 旋轉(zhuǎn)效果,讓交互更加生動,希望對大家有所幫助! 今天,群友問了這樣一個問題,如下所示的鼠標跟隨交互效果,如何實現(xiàn): 簡單分析一下,這個交互效果主要有兩個核心: 借助了 CSS 3D 的能力 元

    2024年02月10日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包