日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总

發(fā)布時(shí)間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Qt::WindowType標(biāo)志通過(guò)如下函數(shù)設(shè)置:

setWindowFlag 或 setWindowFlags

注意:這兩個(gè)函數(shù)的區(qū)別是:不加s的每次只能設(shè)置一個(gè)Qt::WindowType標(biāo)志位,加s的可以用 | 設(shè)置多個(gè)Qt::WindowType。具體參見(jiàn)QFlags的解釋。

匯總?cè)缦?#xff1a;

Qt::Widget:

這個(gè)很簡(jiǎn)單,如果創(chuàng)建時(shí),沒(méi)有父,則自己成為一個(gè)獨(dú)立的窗體,此時(shí)該窗體有標(biāo)題欄;如果有父,則作為子窗體嵌入到父中,嵌入到父時(shí),標(biāo)題欄都不會(huì)存在了。

Qt::Window:

當(dāng)窗體設(shè)置這個(gè)標(biāo)志后,窗體不管是否有父窗體,都會(huì)有標(biāo)題欄和邊框,不會(huì)嵌入到父窗體,如下代碼:

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");QWidget* p = new QWidget();p->setWindowTitle("windows");p->setWindowFlag(Qt::Window);p->show(); }

窗體彈出如下:

將上面的QWidget* p = new QWidget();改為QWidget* p = new QWidget(this);即將this作為其父,依然是彈出上面的窗體。

Qt::Dialog:

等同于創(chuàng)建一個(gè)QDialog的窗體。

Qt::Sheet:

這個(gè)標(biāo)志貌似只在mac系統(tǒng)下起作用,Windows下試了沒(méi)啥效果,等同于設(shè)置窗體為模態(tài)窗體。Qt官方文檔建議用QWidget::setWindowModality(), or QDialog::open(),函數(shù)設(shè)置,而不建議用該標(biāo)志。

Qt::Drawer:

是Qt::Sheet 和 Qt::Dialog的組合,等同于Qt::Sheet | Qt::Dialog,只在mac系統(tǒng)下起作用,Windows系統(tǒng)不起作用。

Qt::Popup

按Qt文檔的解釋是彈出式的頂層模態(tài)窗體,有邊框,但是如下代碼:

#include "QtWidgetsApplication1.h" #include "QtTestWidget.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");setWindowFlag(Qt::Popup);p->show();}

卻出現(xiàn)如下現(xiàn)象:

設(shè)置過(guò)Qt::Popup標(biāo)志的窗體最頂層,沒(méi)有邊框,且鼠標(biāo)一直轉(zhuǎn)圈等待狀態(tài),單擊其它窗體后,Qt::Popup標(biāo)志的窗體消失不見(jiàn)了,原因不知道。

Qt::Tool:

該標(biāo)志指示該窗體是一個(gè)工具窗口。工具窗體比普通一般窗體的標(biāo)題欄小,且有時(shí)有些其它的裝飾。它的典型用途是用來(lái)做工具欄。如果設(shè)置該標(biāo)志的窗體有父窗體,則該標(biāo)志的窗體一直在其父的上面,即置頂;如果沒(méi)有父,你應(yīng)該考慮為該窗體設(shè)置Qt::WindowStaysOnTopHint屬性,你也可以組合Qt::FramelessWindowHint標(biāo)志使用。

Qt::ToolTip:

指示包含該標(biāo)志的窗體用于工具欄提示,如下代碼:

#include "QtWidgetsApplication1.h" #include "QtTestWidget.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget(this);p->setWindowTitle("windows");p->setWindowFlag(Qt::ToolTip); // 設(shè)置p窗體為工具欄提示p->show();}

可以看到設(shè)置該標(biāo)志后,窗體標(biāo)題欄、邊框都沒(méi)有了

Qt::SplashScreen:

指示該窗體用作閃屏。閃屏是有些軟件在主窗體彈出之前,經(jīng)常會(huì)用一個(gè)無(wú)邊框的小窗口彈出一些提示信息,如:加載組件或庫(kù)的進(jìn)度、產(chǎn)品信息等信息,之后該閃屏窗體小時(shí),主程序界面顯示出來(lái)。

Qt::Desktop:

指示該窗體是一個(gè)Desktop類(lèi)型的窗體,它是一個(gè)QDesktopWidget類(lèi)型的窗體。如下代碼:

#include "QtWidgetsApplication1.h" #include "QtTestWidget.h" #include<QDeskTopWidget> QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");p->setWindowFlags(Qt::Desktop);p->show();}

則p表示的QtTestWidget不可見(jiàn)了。

Qt::SubWindow:

指示該窗體是一個(gè)子窗體,類(lèi)似Qt的QMdiSubWindow窗體。

----------------------------------------------------------------------------------------------------------------

Qt::WidgetAttribute枚舉屬性用setAttribute函數(shù)設(shè)置,當(dāng)該函數(shù)的第二個(gè)參數(shù)設(shè)置為true時(shí),則設(shè)置該屬性;當(dāng)該函數(shù)的第二個(gè)參數(shù)設(shè)置為false,表示移除關(guān)閉該屬性。下面分類(lèi)說(shuō)明:

Qt::WA_AcceptDrops:

窗體接受拖放,等同于調(diào)用QWidget::setAcceptDrops函數(shù)。

Qt::WA_AlwaysShowToolTips:

窗體一直顯示工具欄提示。默認(rèn)情況下,當(dāng)為窗體設(shè)置了工具欄提示時(shí),只有在該窗體具有焦點(diǎn)且鼠標(biāo)移動(dòng)到該窗體時(shí)才會(huì)顯示工具欄提示。當(dāng)窗體沒(méi)有獲取到焦點(diǎn)時(shí),鼠標(biāo)移動(dòng)到其上面時(shí)不會(huì)顯示工具欄提示,當(dāng)設(shè)置該屬性true時(shí),即使窗體沒(méi)有獲取焦點(diǎn),鼠標(biāo)移動(dòng)到其上面時(shí),依然會(huì)顯示工具欄提示。如下:

#include "QtWidgetsApplication1.h" #include "QtTestWidget.h" #include<QDeskTopWidget> QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");p->setToolTip("QtTestWidget");p->setAttribute(Qt::WA_AlwaysShowToolTips);p->show();}

彈出如下:

?右側(cè)parent窗體是當(dāng)前具有焦點(diǎn)的窗體,左側(cè)Windows窗體沒(méi)有焦點(diǎn),此時(shí)鼠標(biāo)移動(dòng)到左側(cè)窗體,依然顯示了工具欄提示。

Qt::WA_CustomWhatsThis

按照Qt官方的解釋是:是否開(kāi)啟whatthis提示,但是通過(guò)如下代碼關(guān)掉Whatthis提示,但Whatthis依然有:

#include "QtWidgetsApplication1.h" #include "QtTestWidget.h" #include<QDeskTopWidget> QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");;p->setWhatsThis(tr("Click this option to create a new file."));p->setAttribute(Qt::WA_CustomWhatsThis, false);bool b = p->testAttribute(Qt::WA_CustomWhatsThis);p->show();}

同時(shí)按住shift、F1鍵,依然彈出了如下whatthis提示,原因不知道

?Qt::WA_DeleteOnClose

設(shè)置這個(gè)標(biāo)志的窗體當(dāng)窗體關(guān)閉事件closeEvent()發(fā)生時(shí),會(huì)自動(dòng)由Qt來(lái)刪除該窗體對(duì)象,不用人為刪除。注意:如果設(shè)置了該標(biāo)志的窗體人為刪除會(huì)導(dǎo)致崩潰,如下:

QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent) {ui.setupUi(this);setWindowTitle("parent");p = new QtTestWidget(); // p為在.h文件中定義的成員變量p->setWindowTitle("windows");;p->setAttribute(Qt::WA_DeleteOnClose);p->show();}QtWidgetsApplication1::~QtWidgetsApplication1() {if (p != nullptr){delete p; // qt已經(jīng)刪除過(guò)p,不需要再delete了,如果再delete一次,此處會(huì)奔潰} }

這種方法有個(gè)弊端:因?yàn)檫@個(gè)指針Qt是沒(méi)有辦法自動(dòng)設(shè)為nullptr,會(huì)變?yōu)橐爸羔?/strong>,這也是上面人為刪除崩潰的原因。

Qt::WA_Disabled

當(dāng)窗體該標(biāo)志為true后,窗體的keyPressEvent、keyReleaseEvent、mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvents事件都不會(huì)觸發(fā)、不會(huì)響應(yīng);注意:窗體上的部件如按鈕、編輯框的單擊、輸入等依然有效。當(dāng)窗體上的小部件如按鈕、編輯框等的該標(biāo)志設(shè)置為true后,小部件為禁用狀態(tài),相當(dāng)于調(diào)用setDisabled(true),按鈕、編輯框的單擊、輸入等依然無(wú)效

Qt::WA_DontShowOnScreen

這個(gè)標(biāo)志指示窗體隱藏或不是桌面可見(jiàn)區(qū)域的一部分。相當(dāng)于對(duì)窗體調(diào)用hide()或setVisible(false)函數(shù)

Qt::WA_Hover

設(shè)置這個(gè)標(biāo)志true后,每當(dāng)鼠標(biāo)進(jìn)入窗體或離開(kāi)窗體都會(huì)發(fā)送paint events事件,即如果窗體重寫(xiě)了paintEvent,則paintEvent會(huì)被調(diào)用。

Qt::WA_InputMethodEnabled


設(shè)置這個(gè)標(biāo)志為true后,則開(kāi)啟亞洲輸入法事件,Qwidget的QInputMethodEvent事件就會(huì)觸發(fā)。例如:在一個(gè)密碼框中禁止輸入中文、日文、韓文等亞洲文字作為密碼,這種情況一般我們會(huì)重寫(xiě)QLineEdit,但是過(guò)于復(fù)雜,下面通過(guò)設(shè)置編輯框的Qt::WA_InputMethodEnabled一句代碼搞定:

ui.textEdit->setAttribute(Qt::WA_InputMethodEnabled, false);

Qt::WA_MouseTracking

設(shè)置為true后,等同調(diào)用setMouseTracking(true)

Qt::WA_OpaquePaintEvent

這個(gè)標(biāo)志的解釋,請(qǐng)參見(jiàn)《Qt::WA_OpaquePaintEvent理解》

Qt::WA_NoMousePropagation

這個(gè)標(biāo)志的解釋,請(qǐng)參見(jiàn)《Qt::WA_NoMousePropagation用法》

Qt::WA_QuitOnClose

這個(gè)標(biāo)志的解釋,請(qǐng)參見(jiàn)《Qt::WA_QuitOnClose用法》

Qt::WA_Resized

這個(gè)標(biāo)志默認(rèn)為true,當(dāng)設(shè)置為false后,窗體在改變大小時(shí),不會(huì)發(fā)送QResizeEvent事件,即resizeEvent(QResizeEvent* event)函數(shù)不會(huì)進(jìn)入、不會(huì)響應(yīng),但按住鼠標(biāo)能改變窗體大小。

Qt::WA_StaticContents

請(qǐng)參見(jiàn)Qt自帶的例子scribble,該工程在Qt安裝目錄下的Examples\Qt-5.14.1\widgets\widgetsscribble????? 目錄,官方對(duì)該例子的文檔說(shuō)明參見(jiàn):Scribble Example | Qt Widgets 5.15.7

Qt::WA_ShowWithoutActivating

設(shè)置該標(biāo)志為true后,以非激活模式顯示窗體。即窗體顯示出來(lái)后,但不具備焦點(diǎn),即鍵盤(pán)事件發(fā)生時(shí),該窗體不會(huì)收到;鍵盤(pán)事件不發(fā)到該窗體上。

Qt::WA_AcceptTouchEvents

設(shè)置該標(biāo)志為true后,允許觸摸事件(?QTouchEvent)發(fā)送到該窗體。在所有能處理觸摸事件的窗體上都要將該屬性設(shè)置為true,如果不設(shè)置為true,則將所有的觸摸事件當(dāng)為鼠標(biāo)事件來(lái)處理。

Qt::WA_TabletTracking

相當(dāng)于調(diào)用setTabletTracking,至于什么是Tablet?? Tracking 請(qǐng)參見(jiàn)《Qt Designer中部件的tabletTracking和mouseTracking屬性》

總結(jié)

以上是生活随笔為你收集整理的Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。