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

QT-通用的軟件界面框架,好看且實(shí)用

這篇具有很好參考價(jià)值的文章主要介紹了QT-通用的軟件界面框架,好看且實(shí)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

常規(guī)軟件開發(fā),使用這種界面框架,基本是可以做很多個(gè)常規(guī)項(xiàng)目,比較有參考意義。
本次軟件使用開發(fā)的環(huán)境是QT5.13.2+VS2017,不同的開發(fā)環(huán)境重新配置即可。

一、演示效果

QT-通用的軟件界面框架,好看且實(shí)用

QT-通用的軟件界面框架,好看且實(shí)用

二、配置說明

1、軟件框架結(jié)構(gòu)說明,不同界面獨(dú)立不同的庫來調(diào)用。
QT-通用的軟件界面框架,好看且實(shí)用

2、屬性配置
(1)添加包含目錄:$(SolutionDir)
QT-通用的軟件界面框架,好看且實(shí)用
(2)添加庫依賴
QT-通用的軟件界面框架,好看且實(shí)用
2、控件升級(jí)
QT-通用的軟件界面框架,好看且實(shí)用

QT-通用的軟件界面框架,好看且實(shí)用

三、關(guān)鍵程序

1、主程序內(nèi)容

#include "QSoftFrame.h"
#include "Page/PageHelpWidget/PageHelpWidget.h"
#include "Page/PageLogWidget/PageLogWidget.h"
#include "Page/PageMainWidget/PageMainWidget.h"
#include "Page/PageMinitorWidget/PageMinitorWidget.h"
#include "Page/PageSetingWidget/PageSetingWidget.h"

#include <QFile>
QSoftFrame::QSoftFrame(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	initialUI();
	initialSingleSlot();
	initialQss();
}

//初始化UI
void QSoftFrame::initialUI()
{
	// 去掉原來的標(biāo)題欄
	this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::MaximizeUsingFullscreenGeometryHint);
	ui.btnMax->setVisible(false);

	// 綁定按鍵和界面之間的關(guān)系
	m_btnWidgetMap.insert(ui.btnMain, PageMainWidget());
	m_btnWidgetMap.insert(ui.btnLog, PageLogWidget());
	m_btnWidgetMap.insert(ui.btnHelp, PageHelpWidget());
	m_btnWidgetMap.insert(ui.btnSet, PageSetingWidget());
	m_btnWidgetMap.insert(ui.btnMinitor, PageMinitorWidget());

	ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnMain]);
	ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnLog]);
	ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnHelp]);
	ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnSet]);
	ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnMinitor]);

	// 綁定信號(hào)槽
	auto btns = m_btnWidgetMap.keys();
	for (auto pBtn : btns)
	{
		connect(pBtn, SIGNAL(clicked()), this, SLOT(slotPageChange()));
	}

	//默認(rèn)選中第一個(gè)界面
	ui.btnMain->clicked();

}

//切換不同頁面
void QSoftFrame::slotPageChange()
{
	QToolButton *pBtn = (QToolButton*)sender();
	setPageBtnsCheckState(false);
	pBtn->setChecked(true);

	//有找到Widget就切換
	auto item = m_btnWidgetMap.find(pBtn);
	if (item != m_btnWidgetMap.end())
	{
		ui.stackedWidget->setCurrentWidget(item.value());
	}

}

//初始化信號(hào)槽
void QSoftFrame::initialSingleSlot()
{
	//最小化
	connect(ui.btnMin, &QToolButton::released, this, &QMainWindow::showMinimized);

	//軟件關(guān)閉
	connect(ui.btnClose, &QToolButton::released, this, [&]() {
		this->close();
	});

	//最大化
	connect(ui.btnMax, &QToolButton::released, this, [&]() {
		this->showMaximized();
		ui.btnMax->setVisible(false);
		ui.btnRestore->setVisible(true);
	});

	//重置界面
	connect(ui.btnRestore, &QToolButton::released, this, [&]() {
		this->showNormal();
		ui.btnMax->setVisible(true);
		ui.btnRestore->setVisible(false);
	});
}

// 設(shè)置頁面按鍵狀態(tài)
void QSoftFrame::setPageBtnsCheckState(bool bCheck)
{
	ui.btnMain->setChecked(bCheck);
	ui.btnLog->setChecked(bCheck);
	ui.btnHelp->setChecked(bCheck);
	ui.btnSet->setChecked(bCheck);
	ui.btnMinitor->setChecked(bCheck);
}

//初始化樣式
void QSoftFrame::initialQss()
{
	QString fileName = QString(":/Resource/App.qss");
	QFile file(fileName);
	if (file.open(QFile::ReadOnly))
	{
		QString qss = QLatin1String(file.readAll());
		this->setStyleSheet(qss);
		file.close();
	}

}

//顯示事件
void QSoftFrame::showEvent(QShowEvent *event)
{
	//添加WA_Mapped屬性,防止界面卡死
	this->setAttribute(Qt::WA_Mapped);
	QMainWindow::showEvent(event);

}

//界面大小重置界面
void QSoftFrame::resizeEvent(QResizeEvent *event)
{
	if (this->isMaximized())
	{
		ui.btnMax->setVisible(false);
		ui.btnRestore->setVisible(true);
	}
	else if (this->isMinimized())
	{
	}
	else if (this->isFullScreen())
	{
	}
	else
	{
		ui.btnMax->setVisible(true);
		ui.btnRestore->setVisible(false);
	}
}

2、可拖動(dòng)標(biāo)題欄

#include "QWidgetTiltle.h"

QWidgetTiltle::QWidgetTiltle(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
}

QWidgetTiltle::~QWidgetTiltle()
{
}

void QWidgetTiltle::mousePressEvent(QMouseEvent *event)
{
	//鼠標(biāo)左鍵按下事件
	if (event->button() == Qt::LeftButton)
	{
		//記錄鼠標(biāo)左鍵狀態(tài)
		m_leftButtonPressed = true;

		//記錄鼠標(biāo)在屏幕中的位置
		m_start = event->globalPos();
	}
}

void QWidgetTiltle::mouseMoveEvent(QMouseEvent *event)
{
	if (m_leftButtonPressed)
	{
		//將父窗體移動(dòng)到父窗體原來的位置加上鼠標(biāo)移動(dòng)的位置:event->globalPos()-m_start
		this->window()->move(this->window()->geometry().topLeft() + event->globalPos() - m_start);

		//將鼠標(biāo)在屏幕中的位置替換為新的位置
		m_start = event->globalPos();
	}
}

void QWidgetTiltle::mouseReleaseEvent(QMouseEvent *event)
{
	if (event->button() == Qt::LeftButton)
	{
		m_leftButtonPressed = false;
	}
}

// 雙擊切換界面
void QWidgetTiltle::mouseDoubleClickEvent(QMouseEvent *event)
{
	Q_UNUSED(event);
	if (this->window()->isMaximized())
	{
		//顯示正常的窗口
		this->window()->showNormal();
	}
	else
	{
		//不是最大化的時(shí)候,雙擊最大化
		this->window()->showMaximized();
	}
	
}

3、滾動(dòng)式提示標(biāo)簽

#include "HLabelEx.h"
#include <QPainter>
#include <QTimer>
#include <QFontMetrics>
#include <QTimerEvent>

const QString strSpace("   ");

HLabelEx::HLabelEx(QWidget *parent) : QLabel(parent)
{
    timerId = -1;
    fontSize = 11;
}

void HLabelEx::setText(const QString & txt)
{
    QLabel::setText(txt);

    upateLabelRollingState();
}

void HLabelEx::paintEvent(QPaintEvent *e)
{
    QPainter p(this);

    //  獲取文本框的大小
    QRect rc = rect();
    rc.setHeight(rc.height() - 2);
    rc.setWidth(rc.width() - 2);

    //  設(shè)置即將繪制文字的字體
    QFont ft = font();
	ft.setBold(false);
    ft.setPointSize(fontSize);
    p.setFont(ft);
    p.setPen(QPen(Qt::white));
	

    //  設(shè)置繪制文字的開始位置,也就是將文字往左移動(dòng)多少
    rc.setLeft(rc.left() - left);

    //  如果文字已經(jīng)顯示到末尾,則再添加一遍文字,做出循環(huán)滾動(dòng)的效果
    QString strText = text();
    if(timerId >= 0)
        strText += strSpace + text();

    //  繪制文字
    p.drawText(rc, Qt::AlignVCenter, strText);
}

void HLabelEx::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == timerId && isVisible())
    {
        //  每次左移1個(gè)像素
        left += 1;

        //  判斷是否已經(jīng)完成一遍循環(huán),完成則恢復(fù)起始位置,重新開始循環(huán)
        QFont ft = font();
        ft.setPointSize(fontSize);
        QFontMetrics fm(ft);
        int txtWidth = fm.width(text());
        int spaceWidth = fm.width(strSpace);

        if((txtWidth + spaceWidth) < left)
            left = 0;

        repaint();
    }

    QLabel::timerEvent(e);
}

void HLabelEx::resizeEvent(QResizeEvent *e)
{
    QLabel::resizeEvent(e);

    upateLabelRollingState();
}

void HLabelEx::upateLabelRollingState()
{
    //  獲取文本大小,小于文本框長度,則無需滾動(dòng)
    QFont ft = font();
    ft.setPointSize(fontSize);

    QFontMetrics fm(ft);
    int nW = fm.width(text());

    left = 0;
    //  開啟文本框滾動(dòng)
    if(nW > width())
    {
        timerId = startTimer(100);
    }
    //  關(guān)閉文本框滾動(dòng)
    else
    {
        if(timerId >= 0)
        {
            killTimer(timerId);
            timerId = -1;
        }
    }
}

四、程序下載

https://download.csdn.net/download/u013083044/87558246?spm=1001.2014.3001.5503文章來源地址http://www.zghlxwxcb.cn/news/detail-503903.html

到了這里,關(guān)于QT-通用的軟件界面框架,好看且實(shí)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 界面開發(fā)框架Qt新手入門教程:Dir視圖使用實(shí)例

    界面開發(fā)框架Qt新手入門教程:Dir視圖使用實(shí)例

    Qt?是目前最先進(jìn)、最完整的跨平臺(tái)C++開發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫,所有平臺(tái)無差別運(yùn)行,更提供了幾乎所有開發(fā)過程中需要用到的工具。如今,Qt已被運(yùn)用于超過70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬設(shè)備及應(yīng)用。 點(diǎn)擊獲取Qt Widget組件下載 本示例演示了樹形視圖的用

    2024年02月08日
    瀏覽(21)
  • [QT編程系列-3]:C++圖形用戶界面編程,QT框架快速入門培訓(xùn) - 2- QT程序的運(yùn)行框架:HelloWorld、常見控件、對(duì)象樹原理

    [QT編程系列-3]:C++圖形用戶界面編程,QT框架快速入門培訓(xùn) - 2- QT程序的運(yùn)行框架:HelloWorld、常見控件、對(duì)象樹原理

    目錄 2.?QT程序的運(yùn)行框架 2.1 Hello World程序框架 2.2 QT Designer初識(shí) 2.3 用QT Designer設(shè)計(jì)用戶登錄界 上述示例代碼中,首先根據(jù)應(yīng)用程序的需求使用 QCoreApplication 或 QApplication 定義 app 對(duì)象。如果你的應(yīng)用程序需要圖形界面,則使用 QApplication,否則使用 QCoreApplication。然后,你可以

    2024年02月15日
    瀏覽(23)
  • 好看的html登錄界面,

    好看的html登錄界面,

    界面效果: 代碼:

    2023年04月09日
    瀏覽(20)
  • 界面開發(fā)框架Qt新手入門教程 - 可編輯樹模型的示例(一)

    Qt?是目前最先進(jìn)、最完整的跨平臺(tái)C++開發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫,所有平臺(tái)無差別運(yùn)行,更提供了幾乎所有開發(fā)過程中需要用到的工具。如今,Qt已被運(yùn)用于超過70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬設(shè)備及應(yīng)用。 點(diǎn)擊獲取Qt Widget組件下載 (Q技術(shù)交流:166830288) 樹項(xiàng)

    2024年02月06日
    瀏覽(23)
  • OA系統(tǒng)登錄界面(比較好看)
  • C++界面開發(fā)框架Qt 6.x入門指南 - 擁有程序主窗口

    C++界面開發(fā)框架Qt 6.x入門指南 - 擁有程序主窗口

    Qt技術(shù)交流群:166830288??????歡迎一起進(jìn)群討論 點(diǎn)擊獲取Qt組件下載 Qt?Widget 是桌面環(huán)境中典型的用戶界面元素,這些小部件很好地集成到底層平臺(tái),在 Windows、Linux 和 macOS 上提供原生外觀。 這些小部件成熟且具有豐富的用戶界面元素,適用于大多數(shù)傳統(tǒng)用戶界面。 與?

    2024年02月05日
    瀏覽(15)
  • 80.qt qml-QianWindow炫酷界面框架-新增Canvas動(dòng)態(tài)背景

    80.qt qml-QianWindow炫酷界面框架-新增Canvas動(dòng)態(tài)背景

    如下圖所示: ? ?動(dòng)圖如下所示: 如果我們使用圖片,對(duì)于分辨率大的顯示時(shí),如果圖片太小會(huì)失真,如果圖片太大會(huì)占用很大內(nèi)存,而且如果是動(dòng)態(tài)圖背景,那么至少40MB大小了. 所以我們?cè)黾覥anvas動(dòng)態(tài)背景功能,而且Canvas還可以根據(jù)系統(tǒng)性能我們來進(jìn)行內(nèi)部代碼優(yōu)化.比單色背景有趣的

    2024年02月05日
    瀏覽(25)
  • 一個(gè)好看美觀的登錄注冊(cè)界面的實(shí)現(xiàn)

    一個(gè)好看美觀的登錄注冊(cè)界面的實(shí)現(xiàn)

    序言:之前介紹那個(gè)博客,然后自己搞了這個(gè)界面。最近有人和我要,把代碼給大家貼出來,提供參考。 首先是這個(gè)界面哈 然后呢,有那個(gè)javascript,就是綁定的登錄注冊(cè)時(shí)寫在外部文件中的。我給大家貼上。 注意啊上面一個(gè)登錄一個(gè)注冊(cè)。 這里同樣給出后端代碼,就是我們

    2024年02月11日
    瀏覽(26)
  • HTML 實(shí)現(xiàn)好看的登錄注冊(cè)界面(一)
  • vue+element ui實(shí)現(xiàn)好看的登錄界面

    vue+element ui實(shí)現(xiàn)好看的登錄界面

    閑暇之余使用vue+element ui制作了個(gè)登錄界面 話不多說,先上圖 下面直接上代碼: 附加背景圖片 喜歡的老爺們可以給小弟一鍵三連哦,后續(xù)小弟還會(huì)發(fā)更多作品

    2024年02月11日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包