翻譯|使用教程|編輯:龔雪|2024-11-14 10:46:31.693|閱讀 117 次
概述:本文主要介紹展示如何使用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@ke049m.cn
文章轉載自:慧都網