最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt模仿Visual?Studio??看翱谛Ч?/h1>
 更新時間:2022年01月13日 15:56:15   作者:浮生卍流年  
這篇文章主要介紹了如何利用Qt制作與Visual?Studio相似的帶有??糠较驑?biāo)及停靠區(qū)域預(yù)覽的??看翱诳蚣埽疚耐ㄟ^實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

前言

眾所周知,??看翱诳梢詫崿F(xiàn)任意拖動效果,本文重點在于如何利用Qt制作與Visual Studio相似的帶有??糠较驑?biāo)及停靠區(qū)域預(yù)覽的的??看翱诳蚣?。

效果圖

在這里插入圖片描述

功能

1、鼠標(biāo)在中間方向標(biāo):疊加窗口
2、鼠標(biāo)在上下左右方向標(biāo):分割目標(biāo)窗口,并緊挨著目標(biāo)窗口周邊位置添加新窗口
3、鼠標(biāo)在內(nèi)部最上下左右方向標(biāo):目標(biāo)窗口所在的最上下左右位置添加新窗口
4、鼠標(biāo)在外部最上下左右方向標(biāo):程序主窗口的最上下左右位置添加新窗口
5、鼠標(biāo)在Tab位置上:在當(dāng)前所在tab頁位置插入新窗口
6、鼠標(biāo)在Tab最右側(cè)位置上:在tab頁尾部添加新窗口
注釋:Dock停靠優(yōu)先級:某些情況下,外部最上下左右方向的方向標(biāo)會和目標(biāo)窗口方向標(biāo)重疊,此時遵循 中間停靠優(yōu)于外部???、方向標(biāo)??績?yōu)于tab頁???/code>的原則。

部分頭文件

#pragma once
#include <QWidget>
#include <QPaintEvent>
#include "QWHDockWidget.h"
class QMainWindow;
class QTabWidget;
class QDockWidget;
class QSplitter;
class QWHTabWidgetMask : public QWidget
{
	Q_OBJECT
public:
	enum Area
	{
		None,Top, Right, Bottom, Left, TopMore, RightMore, BottomMore, LeftMore, Center, TopMost, RightMost, BottomMost, LeftMost
	};
	QWHTabWidgetMask();
	~QWHTabWidgetMask();
	static QWHTabWidgetMask *getInstance();
	// 設(shè)置程序主窗口
	void setMainWindow(QMainWindow *mainWindow);
	// 創(chuàng)建停靠窗口
	QWHDockWidget *createDockWidget(QWHDockWidget::AreaMode areaMode, const QString &windowTitle = "");
	// 創(chuàng)建分裂器(水平分裂)
	QSplitter *createSplitter();
	// 創(chuàng)建分裂器(由參數(shù)orientation決定分裂方向)
	QSplitter *createSplitter(Qt::Orientation orientation);
	// 設(shè)置程序主分裂器
	void setMainSplitter(QSplitter *splitter);
	// 設(shè)置目標(biāo)窗口(接收方)
	void setTargetWidget(QTabWidget *widget);
	// 設(shè)置當(dāng)前頁索引(鼠標(biāo)移入當(dāng)前頁 或 鼠標(biāo)移入中心方向標(biāo))
	void setCurTabIndex(int index);
	// 設(shè)置鼠標(biāo)按下的??看翱冢?zhǔn)備移動的窗口)
	void setMousePressed(QWHDockWidget *moveDockWidget);
	// 設(shè)置鼠標(biāo)釋放
	void setMouseReleased();
	// 獲取停靠窗口推薦最小尺寸
	QSize minimumSizeHint() const override;
	// 獲取鼠標(biāo)按下的??看翱冢?zhǔn)備移動或正在移動的窗口)
	QDockWidget *moveDockWidget();
	// 獲取程序主分裂器
	QSplitter *mainSplitter();
	// 獲取程序主窗口
	QMainWindow *mainWindow();
protected:
	void paintEvent(QPaintEvent *event);
private:
	// 獲取指定索引的邊界路徑
	QPainterPath tabWidgetBorderPath(QTabWidget *tabWidget, int tabIndex);
	// 繪制主停靠窗口的指示器
	void drawMainDockIndicator();
	// 繪制次??看翱诘闹甘酒?
	void drawMinorDockIndicator();
	// 檢查鼠標(biāo)所在方向標(biāo)區(qū)域
	Area checkArea(QPoint globalPos);
signals:
	// 創(chuàng)建??看翱?
	void dockWidgetAdded(QWHDockWidget *newDockWidget);
private:
	QMainWindow *m_mainWindow;
	QSplitter *m_mainSplitter;
	QWHDockWidget *m_moveDockWidget;
	QTabWidget *m_targetWidget;
	QList<QWHDockWidget *> m_listDockWidgets;
	int m_tabIndex;
	QColor m_borderColor;
	QColor m_bgColor;
	QRect m_centerRect;	// 中心矩形
	QRect m_topRect, m_rightRect, m_bottomRect, m_leftRect;	// 四個方位矩形(緊挨著中心矩形)
	QRect m_topMoreRect, m_rightMoreRect, m_bottomMoreRect, m_leftMoreRect;	// 更加靠邊四個方位矩形(緊挨著四個方位矩形)
	QRect m_topMostRect, m_rightMostRect, m_bottomMostRect, m_leftMostRect;	// 最靠邊四個方向矩形(緊挨著主窗口四邊)
	QPixmap m_centerPixmap;
	QPixmap m_topPixmap, m_rightPixmap, m_bottomPixmap, m_leftPixmap;
	QPixmap m_topMostPixmap, m_rightMostPixmap, m_bottomMostPixmap, m_leftMostPixmap;
	QPixmap m_centerPixmapHover;
	QPixmap m_topPixmapHover, m_rightPixmapHover, m_bottomPixmapHover, m_leftPixmapHover;
	QPixmap m_topMostPixmapHover, m_rightMostPixmapHover, m_bottomMostPixmapHover, m_leftMostPixmapHover;
};

測試代碼

TestVSWindow::TestVSWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	QWHTabWidgetMask::getInstance()->setMainWindow(this);
	
	// 測試左側(cè)??看绑w
	QWHDockWidget *dockWidget = QWHTabWidgetMask::getInstance()->createDockWidget(QWHDockWidget::Mode_Minor, "總tab");
	QSplitter *splitter = QWHTabWidgetMask::getInstance()->createSplitter();
	splitter->addWidget(dockWidget);
	dockWidget->setFloating(false);
	
	QWidget *widget1 = new QWidget();
	widget1->setMinimumSize(200, 100);
	widget1->setStyleSheet("background-color: green;");
	dockWidget->tabWidget()->addTab(widget1, "第一頁");
	QWidget *widget2 = new QWidget();
	widget2->setMinimumSize(200, 100);
	widget2->setStyleSheet("background-color: green;");
	dockWidget->tabWidget()->addTab(widget2, "第二頁");
	QWidget *widget3 = new QWidget();
	widget3->setMinimumSize(200, 100);
	widget3->setStyleSheet("background-color: green;");
	dockWidget->tabWidget()->addTab(widget3, "第三頁");
	// 測試中間停靠窗體
	QWHDockWidget *dockWidgetCenter = QWHTabWidgetMask::getInstance()->createDockWidget(QWHDockWidget::Mode_Main, "總tabCenter");
	splitter->addWidget(dockWidgetCenter);
	dockWidgetCenter->setFloating(false);
	
	QWidget *widgetCenter1 = new QWidget();
	widgetCenter1->setMinimumSize(200, 100);
	widgetCenter1->setStyleSheet("background-color: rgb(255, 174, 201);");
	dockWidgetCenter->tabWidget()->addTab(widgetCenter1, "第一頁Center");
	QWidget *widgetCenter2 = new QWidget();
	widgetCenter2->setMinimumSize(200, 100);
	widgetCenter2->setStyleSheet("background-color: rgb(255, 174, 201);");
	dockWidgetCenter->tabWidget()->addTab(widgetCenter2, "第二頁Center");
	QWidget *widgetCenter3 = new QWidget();
	widgetCenter3->setMinimumSize(200, 100);
	widgetCenter3->setStyleSheet("background-color: rgb(255, 174, 201);");
	dockWidgetCenter->tabWidget()->addTab(widgetCenter3, "第三頁Center");
	// 測試右側(cè)??看绑w
	QWHDockWidget *dockWidget2 = QWHTabWidgetMask::getInstance()->createDockWidget(QWHDockWidget::Mode_Minor, "總tab2");
	splitter->addWidget(dockWidget2);
	dockWidget2->setFloating(false);
	QWidget *widget12 = new QWidget();
	widget12->setMinimumSize(200, 100);
	widget12->setStyleSheet("background-color: gray;");
	dockWidget2->tabWidget()->addTab(widget12, "第一頁2");
	QWidget *widget22 = new QWidget();
	widget22->setMinimumSize(200, 100);
	widget22->setStyleSheet("background-color: gray;");
	dockWidget2->tabWidget()->addTab(widget22, "第二頁2");
	QWidget *widget32 = new QWidget();
	widget32->setMinimumSize(200, 100);
	widget32->setStyleSheet("background-color: gray;");
	dockWidget2->tabWidget()->addTab(widget32, "第三頁2");
	QWHTabWidgetMask::getInstance()->setMainSplitter(splitter);
}

到此這篇關(guān)于Qt模仿Visual Studio??看翱谛Ч奈恼戮徒榻B到這了,更多相關(guān)Qt??看翱?內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++無法從“const char[ ]”轉(zhuǎn)換為“char *”問題及解決

    C++無法從“const char[ ]”轉(zhuǎn)換為“char *”問題及解決

    這篇文章主要介紹了C++無法從“const char[ ]”轉(zhuǎn)換為“char *”問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • C語言popen函數(shù)調(diào)用其他進程返回值示例詳解

    C語言popen函數(shù)調(diào)用其他進程返回值示例詳解

    這篇文章主要為大家介紹了C語言popen函數(shù)調(diào)用其他進程返回值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • C++如何使用new來初始化指向類的指針

    C++如何使用new來初始化指向類的指針

    這篇文章主要介紹了C++如何使用new來初始化指向類的指針問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C語言實現(xiàn)簡單版三子棋

    C語言實現(xiàn)簡單版三子棋

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單版三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 淺析C++中結(jié)構(gòu)體的定義、初始化和引用

    淺析C++中結(jié)構(gòu)體的定義、初始化和引用

    以下是對C++中結(jié)構(gòu)體的定義、初始化和引用進行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • C++中實現(xiàn)保存數(shù)據(jù)到CSV文件

    C++中實現(xiàn)保存數(shù)據(jù)到CSV文件

    這篇文章主要介紹了C++中實現(xiàn)保存數(shù)據(jù)到CSV文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言實現(xiàn)繪制南丁格爾玫瑰圖的示例代碼

    C語言實現(xiàn)繪制南丁格爾玫瑰圖的示例代碼

    玫瑰圖中有一種不等半徑的統(tǒng)計圖稱為南丁格爾玫瑰圖,網(wǎng)上很熱門,是一很有藝術(shù)感的漂亮的統(tǒng)計圖,下面我們就來看看如何使用C語言繪制它吧
    2024-03-03
  • C語言中結(jié)構(gòu)體和共用體實例教程

    C語言中結(jié)構(gòu)體和共用體實例教程

    這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體和共用體的相關(guān)資料,結(jié)構(gòu)體是一種自定義的復(fù)合數(shù)據(jù)類型,共用體也叫聯(lián)合體,使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋),需要的朋友可以參考下
    2021-06-06
  • 解析C++類內(nèi)存分布

    解析C++類內(nèi)存分布

    本篇文章介紹了C++類內(nèi)存分布結(jié)構(gòu),我們來看看編譯器是怎么處理類成員內(nèi)存分布的,特別是在繼承、虛函數(shù)存在的情況下
    2021-06-06
  • c語言B樹深入理解

    c語言B樹深入理解

    B樹是為磁盤或其他直接存儲設(shè)備設(shè)計的一種平衡查找樹,本文將詳細(xì)介紹c語言B樹,需要的朋友可以參考下
    2012-11-11

最新評論

通许县| 霞浦县| 社旗县| 攀枝花市| 台中县| 清远市| 蒙自县| 邯郸市| 舒兰市| 安新县| 沙田区| 海晏县| 大方县| 徐闻县| 凤山县| 凤凰县| 建阳市| 永清县| 陕西省| 怀集县| 南京市| 朝阳区| 湟中县| 濉溪县| 江华| 永登县| 潞西市| 虞城县| 台北县| 都昌县| 永平县| 翁牛特旗| 遂宁市| 永安市| 密云县| 成都市| 龙泉市| 田东县| 兰州市| 兴化市| 芒康县|