翻譯|使用教程|編輯:龔雪|2024-04-01 10:43:49.177|閱讀 121 次
概述:本文將為大家介紹如何使用Qt Widget小部件創建文檔查看器,歡迎下載最新版組件體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用于超過70個行業、數千家企業,支持數百萬設備及應用。
Group Box(分組框)示例展示了如何在Qt中使用不同類型的分組框。Group Box(分組框)是容器小部件,可以在邏輯上和屏幕上將按鈕組織成組,它們管理用戶和應用程序之間的交互,因此您不必強制執行簡單的約束。
分組框通常用于將復選框和單選按鈕組織到排他性組中。
Qt技術交流群:166830288 歡迎一起進群討論
Group Boxes示例包含一個單一的Window類,用于顯示四個分組框:一個獨占的單選按鈕組、一個非獨占的復選框組、一個具有啟用復選框的獨占單選按鈕組,以及一個具有普通按鈕的組框。
Window類是QWidget的一個子類,用于顯示多個分組框。類定義包含構造每個分組框的函數,并用不同選擇的按鈕部件填充它:
class Window : public QWidget { Q_OBJECT public: Window(QWidget *parent = nullptr); private: QGroupBox *createFirstExclusiveGroup(); QGroupBox *createSecondExclusiveGroup(); QGroupBox *createNonExclusiveGroup(); QGroupBox *createPushButtonGroup(); };
在本示例中,小部件將用作頂級窗口,因此定義了構造函數,這樣我們就不必指定父小部件。
構造函數創建了一個網格布局,并用要顯示的每個分組框填充它:
Window::Window(QWidget *parent) : QWidget(parent) { QGridLayout *grid = new QGridLayout; grid->addWidget(createFirstExclusiveGroup(), 0, 0); grid->addWidget(createSecondExclusiveGroup(), 1, 0); grid->addWidget(createNonExclusiveGroup(), 0, 1); grid->addWidget(createPushButtonGroup(), 1, 1); setLayout(grid); setWindowTitle(tr("Group Boxes")); resize(480, 320); }
用于創建每個分組框的函數都返回一個要插入到網格布局中的QGroupBox。
QGroupBox *Window::createFirstExclusiveGroup() { QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons")); QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1")); QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2")); QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3")); radio1->setChecked(true);
第一個分組框包含并管理三個單選按鈕,由于分組框只包含單選按鈕,因此默認情況下它是排他性的,因此在任何給定時間只能選中一個單選按鈕。我們檢查第一個單選按鈕,以確保按鈕組包含一個已檢查的按鈕。
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); vbox->addWidget(radio3); vbox->addStretch(1); groupBox->setLayout(vbox); return groupBox; }
我們在分組框中使用垂直布局,以垂直列表的形式顯示按鈕,并將分組框返回給構造函數。
第二個分組框本身是可檢查的,提供了一種方便的方法來禁用其中的所有按鈕。最初它是未選中的,因此必須先選中分組框本身,然后才能選中其中的任何單選按鈕。
QGroupBox *Window::createSecondExclusiveGroup() { QGroupBox *groupBox = new QGroupBox(tr("E&xclusive Radio Buttons")); groupBox->setCheckable(true); groupBox->setChecked(false);
分組框包含三個互斥的單選按鈕和一個獨立的復選框,為了保持一致性,必須始終選中一個單選按鈕,因此我們確保首先選中第一個按鈕。
QRadioButton *radio1 = new QRadioButton(tr("Rad&io button 1")); QRadioButton *radio2 = new QRadioButton(tr("Radi&o button 2")); QRadioButton *radio3 = new QRadioButton(tr("Radio &button 3")); radio1->setChecked(true); QCheckBox *checkBox = new QCheckBox(tr("Ind&ependent checkbox")); checkBox->setChecked(true);
按鈕的排列方式與第一個分組框中的按鈕相同。
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); vbox->addWidget(radio3); vbox->addWidget(checkBox); vbox->addStretch(1); groupBox->setLayout(vbox); return groupBox; }
第三個分組框使用“平面”樣式構造,更適合某些類型的對話框。
QGroupBox *Window::createNonExclusiveGroup() { QGroupBox *groupBox = new QGroupBox(tr("Non-Exclusive Checkboxes")); groupBox->setFlat(true);
此分組框僅包含復選框,因此默認情況下它是非排他性的,這意味著每個復選框都可以獨立于其他復選框進行選中。
QCheckBox *checkBox1 = new QCheckBox(tr("&Checkbox 1")); QCheckBox *checkBox2 = new QCheckBox(tr("C&heckbox 2")); checkBox2->setChecked(true); QCheckBox *tristateBox = new QCheckBox(tr("Tri-&state button")); tristateBox->setTristate(true);
同樣,我們在分組框中使用垂直布局,以垂直列表的形式顯示按鈕。
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(checkBox1); vbox->addWidget(checkBox2); vbox->addWidget(tristateBox); vbox->addStretch(1); groupBox->setLayout(vbox); return groupBox; }
最后一個分組框只包含按鈕,并且與第二個分組框一樣,它是可檢查的。
QGroupBox *Window::createPushButtonGroup() { QGroupBox *groupBox = new QGroupBox(tr("&Push Buttons")); groupBox->setCheckable(true); groupBox->setChecked(true);
我們創建了一個普通按鈕、一個切換按鈕和一個平面按鈕:
QPushButton *pushButton = new QPushButton(tr("&Normal Button")); QPushButton *toggleButton = new QPushButton(tr("&Toggle Button")); toggleButton->setCheckable(true); toggleButton->setChecked(true); QPushButton *flatButton = new QPushButton(tr("&Flat Button")); flatButton->setFlat(true);
Push按鈕可以用來顯示彈出式菜單,我們創建一個,并附加一個簡單的菜單:
QPushButton *popupButton = new QPushButton(tr("Pop&up Button")); QMenu *menu = new QMenu(this); menu->addAction(tr("&First Item")); menu->addAction(tr("&Second Item")); menu->addAction(tr("&Third Item")); menu->addAction(tr("F&ourth Item")); popupButton->setMenu(menu);
最后,我們垂直布局小部件,并返回創建的分組框:
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(pushButton); vbox->addWidget(toggleButton); vbox->addWidget(flatButton); vbox->addWidget(popupButton); vbox->addStretch(1); groupBox->setLayout(vbox); return groupBox; }
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網