翻譯|使用教程|編輯:龔雪|2024-11-14 10:46:31.693|閱讀 111 次
概述:本文主要介紹展示如何使用Qt中可用的窗口標志,歡迎下載最新版組件體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用于超過70個行業、數千家企業,支持數百萬設備及應用。
窗口標志要么是類型,要么是提示。類型用于為小部件指定各種窗口系統屬性,一個小部件只能有一種類型,默認是,但是小部件可以有零個或多個提示;提示用于自定義頂級窗口的外觀。
小部件的標志存儲在Qt::WindowFlags類型中,該類型存儲標志的OR組合。
Qt技術交流群:166830288 歡迎一起進群討論
在上文中(點擊這里回顧>>),我們為大家介紹了ControllerWindow類定義和實現,本文將繼續介紹PreviewWindow類的定義和實現!
class PreviewWindow : public QWidget { Q_OBJECT public: PreviewWindow(QWidget *parent = nullptr); void setWindowFlags(Qt::WindowFlags flags); private: QTextEdit *textEdit; QPushButton *closeButton; };
PreviewWindow類繼承了,它是一個自定義小部件,在只讀文本編輯器中顯示其當前設置的窗口標志的名稱,它還提供了一個關閉窗口的QPushbutton。
我們重新實現構造函數來創建關閉按鈕和文本編輯器,并使用() 函數來顯示窗口標志的名稱。
PreviewWindow::PreviewWindow(QWidget *parent) : QWidget(parent) { textEdit = new QTextEdit; textEdit->setReadOnly(true); textEdit->setLineWrapMode(QTextEdit::NoWrap); closeButton = new QPushButton(tr("&Close")); connect(closeButton, &QPushButton::clicked, this, &PreviewWindow::close); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(textEdit); layout->addWidget(closeButton); setLayout(layout); setWindowTitle(tr("Preview")); }
在構造函數中,我們首先創建t并確保它是只讀的。
我們還使用()函數禁止文本編輯器中的任何換行,結果是當窗口標志的名稱超過編輯器的寬度時,將出現水平滾動條。這是一個合理的解決方案,因為我們使用內置的換行符來構造顯示的文本。如果沒有保證換行,使用另一個可能更有意義。
然后我們創建Close按鈕,并在設置窗口標題之前將這兩個小部件放入中。
void PreviewWindow::setWindowFlags(Qt::WindowFlags flags) { QWidget::setWindowFlags(flags); QString text; Qt::WindowFlags type = (flags & Qt::WindowType_Mask); if (type == Qt::Window) text = "Qt::Window"; else if (type == Qt::Dialog) text = "Qt::Dialog"; else if (type == Qt::Sheet) text = "Qt::Sheet"; else if (type == Qt::Drawer) text = "Qt::Drawer"; else if (type == Qt::Popup) text = "Qt::Popup"; else if (type == Qt::Tool) text = "Qt::Tool"; else if (type == Qt::ToolTip) text = "Qt::ToolTip"; else if (type == Qt::SplashScreen) text = "Qt::SplashScreen"; if (flags & Qt::MSWindowsFixedSizeDialogHint) text += "\n| Qt::MSWindowsFixedSizeDialogHint"; if (flags & Qt::X11BypassWindowManagerHint) text += "\n| Qt::X11BypassWindowManagerHint"; if (flags & Qt::FramelessWindowHint) text += "\n| Qt::FramelessWindowHint"; if (flags & Qt::NoDropShadowWindowHint) text += "\n| Qt::NoDropShadowWindowHint"; if (flags & Qt::WindowTitleHint) text += "\n| Qt::WindowTitleHint"; if (flags & Qt::WindowSystemMenuHint) text += "\n| Qt::WindowSystemMenuHint"; if (flags & Qt::WindowMinimizeButtonHint) text += "\n| Qt::WindowMinimizeButtonHint"; if (flags & Qt::WindowMaximizeButtonHint) text += "\n| Qt::WindowMaximizeButtonHint"; if (flags & Qt::WindowCloseButtonHint) text += "\n| Qt::WindowCloseButtonHint"; if (flags & Qt::WindowContextHelpButtonHint) text += "\n| Qt::WindowContextHelpButtonHint"; if (flags & Qt::WindowShadeButtonHint) text += "\n| Qt::WindowShadeButtonHint"; if (flags & Qt::WindowStaysOnTopHint) text += "\n| Qt::WindowStaysOnTopHint"; if (flags & Qt::WindowStaysOnBottomHint) text += "\n| Qt::WindowStaysOnBottomHint"; if (flags & Qt::CustomizeWindowHint) text += "\n| Qt::CustomizeWindowHint"; textEdit->setPlainText(text); }
我們重新實現setWindowFlags()函數時,首先使用QWidget::setWindowFlags()函數設置小部件標志,然后遍歷可用的窗口標志,創建一個文本,其中包含與flags參數匹配的標志的名稱。最后,我們在widgets文本編輯器中顯示文本。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網