Qt 中容器类型的控件
轉載:https://subingwen.cn/qt/qt-containers/
?
1、QWidget
這個類是所有窗口類的父類,可以作為獨立窗口使用,也可以內嵌到其它窗口中使用。
Qt 中的所有控件都屬于窗口類, 因此這個類也是所有控件類的基類。
如果一個窗口中還有子窗口, 為了讓子窗口有序排列, 這時候我們可以選擇一個 QWidget 類型的容器,將子窗口放到里邊,然后再給這個 QWidget 類型窗口進行布局操作。
2、QFrame?
QFrame 就是一個升級版的 QWidget, 它繼承了 QWidget 的屬性,并且做了拓展,這種類型的容器窗口可以提供邊框,并且可以設置邊框的樣式、寬度以及邊框的陰影。
?
?
?3、QGroupBox
bool QGroupBox::isCheckable() const;
// 設置是否在組框中顯示一個復選框
void QGroupBox::setCheckable(bool checkable);
Qt::Alignment QGroupBox::alignment() const;
// 設置組框標題的對其方式
void QGroupBox::setAlignment(int alignment);
QString QGroupBox::title() const;
// 設置組框的標題
void QGroupBox::setTitle(const QString &title);
bool QGroupBox::isChecked() const;
// 設置組框中復選框的選中狀態
[slot] void QGroupBox::setChecked(bool checked);
?組框中的 flat 屬性沒有對應的 API 函數,只能在屬性窗口中設置,它控制的是窗口邊框的繪制方式,如果打開該屬性,組框的邊框就消失了
4、?QScrollArea
類型的容器,里邊可以放置一些窗口控件,當放置的窗口控件大于當前區域導致無法全部顯示的時候, 滾動區域容器會自動添加相應的滾動條(水平方向或者垂直方向), 保證放置到該區域中的所有窗口內容都可以正常顯示出來。對于使用者不需要做太多事情,只需要把需要顯示的窗口放到滾動區域中就行了。
在某些特定環境下,我們需要動態的往滾動區域內部添加要顯示的窗口,或者動態的將顯示的窗口移除,這時候就必須要調用對應的 API 函數來完成這部分操作了。主要 API 有兩個 添加 - setWidget(), 移除 - takeWidget()
// 給滾動區域設置要顯示的子窗口widget
void QScrollArea::setWidget(QWidget *widget);
// 刪除滾動區域中的子窗口, 并返回被刪除的子窗口對象
QWidget *QScrollArea::takeWidget();
5、QToolBox
QToolBox 工具箱控件,可以存儲多個子窗口,該控件可以實現類似 QQ 的抽屜效果,每一個抽屜都可以設置圖標和標題,并且對應一個子窗口,通過抽屜按鈕就可以實現各個子窗口顯示的切換。
?
// 構造函數 QToolBox::QToolBox(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());// 公共成員 /* addItem(), insertItem()函數相關參數:- widget: 添加到工具箱中的選項卡對應的子窗口對象- icon: 工具箱新的選項卡上顯示的圖標- text: 工具箱新的選項卡上顯示的標題- index: 指定在工具箱中插入的新的選項卡的位置 */ // 給工具箱尾部添加一個選項卡, 每個選項卡在工具箱中就是一個子窗口, 即參數widget int QToolBox::addItem(QWidget *widget, const QString &text); int QToolBox::addItem(QWidget *widget, const QIcon &icon, const QString &text); // 在工具箱的指定位置添加一個選項卡, 即添加一個子窗口 int QToolBox::insertItem(int index, QWidget *widget, const QString &text); int QToolBox::insertItem(int index, QWidget *widget, const QIcon &icon, const QString &text); // 移除工具箱中索引index位置對應的選項卡, 注意: 只是移除對應的窗口對象并沒有被銷毀 void QToolBox::removeItem(int index);// 設置索引index位置的選項卡是否可用, 參數 enabled=true為可用, enabled=false為禁用 void QToolBox::setItemEnabled(int index, bool enabled); // 設置工具箱中index位置選項卡的圖標 void QToolBox::setItemIcon(int index, const QIcon &icon); // 設置工具箱中index位置選項卡的標題 void QToolBox::setItemText(int index, const QString &text); // 設置工具箱中index位置選項卡的提示信息(需要鼠標在選項卡上懸停一定時長才能顯示) void QToolBox::setItemToolTip(int index, const QString &toolTip);// 如果位置索引的項已啟用,則返回true;否則返回false。 bool QToolBox::isItemEnabled(int index) const; // 返回位置索引處項目的圖標,如果索引超出范圍,則返回空圖標。 QIcon QToolBox::itemIcon(int index) const; // 返回位于位置索引處的項的文本,如果索引超出范圍,則返回空字符串。 QString QToolBox::itemText(int index) const; // 返回位于位置索引處的項的工具提示,如果索引超出范圍,則返回空字符串。 QString QToolBox::itemToolTip(int index) const;// 得到當前工具箱中顯示的選項卡對應的索引 int QToolBox::currentIndex() const; // 返回指向當前選項卡對應的子窗口的指針,如果沒有這樣的項,則返回0。 QWidget *QToolBox::currentWidget() const; // 返回工具箱中子窗口的索引,如果widget對象不存在,則返回-1 int QToolBox::indexOf(QWidget *widget) const; // 返回工具箱中包含的項的數量。 int QToolBox::count() const;// 信號 // 工具箱中當前顯示的選項卡發生變化, 該信號被發射, index為當前顯示的新的選項卡的對應的索引 [signal] void QToolBox::currentChanged(int index);// 槽函數 // 通過工具箱中選項卡對應的索引設置當前要顯示哪一個選項卡中的子窗口 [slot] void QToolBox::setCurrentIndex(int index); // 通過工具箱中選項卡對應的子窗口對象設置當前要顯示哪一個選項卡中的子窗口 [slot] void QToolBox::setCurrentWidget(QWidget *widget);6、QTabWidget
QTabWidget 的一種帶標簽頁的窗口,在這種類型的窗口中可以存儲多個子窗口,每個子窗口的顯示可以通過對應的標簽進行切換
// 構造函數 QTabWidget::QTabWidget(QWidget *parent = Q_NULLPTR);// 公共成員函數 /* 添加選項卡addTab()或者插入選項卡insertTab()函數相關的參數如下:- page: 添加或者插入的選項卡對應的窗口實例對象- label: 添加或者插入的選項卡的標題- icon: 添加或者插入的選項卡的圖標- index: 將新的選項卡插入到索引index的位置上 */ int QTabWidget::addTab(QWidget *page, const QString &label); int QTabWidget::addTab(QWidget *page, const QIcon &icon, const QString &label); int QTabWidget::insertTab(int index, QWidget *page, const QString &label); int QTabWidget::insertTab(int index, QWidget *page, const QIcon &icon, const QString &label); // 刪除index位置的選項卡 void QTabWidget::removeTab(int index);// 得到選項卡欄中的選項卡的數量 int count() const; // 從窗口中移除所有頁面,但不刪除它們。調用這個函數相當于調用removeTab(),直到選項卡小部件為空為止。 void QTabWidget::clear(); // 獲取當前選項卡對應的索引 int QTabWidget::currentIndex() const; // 獲取當前選項卡對應的窗口對象地址 QWidget *QTabWidget::currentWidget() const; // 返回索引位置為index的選項卡頁,如果索引超出范圍則返回0。 QWidget *QTabWidget::widget(int index) const;/* 標簽上顯示的文本樣式為枚舉類型 Qt::TextElideMode, 可選項為:- Qt::ElideLeft: 省略號應出現在課文的開頭,例如:.....是的,我很帥。- Qt::ElideRight: 省略號應出現在文本的末尾,例如:我帥嗎.....。- Qt::ElideMiddle: 省略號應出現在文本的中間,例如:我帥.....很帥。- Qt::ElideNone: 省略號不應出現在文本中 */ // 獲取標簽上顯示的文本模式 Qt::TextElideMode QTabWidget::elideMode() const; // 如何省略標簽欄中的文本, 此屬性控制在給定的選項卡欄大小沒有足夠的空間顯示項時如何省略項。 void QTabWidget::setElideMode(Qt::TextElideMode);// 得到選項卡上圖標的尺寸信息 QSize QTabWidget::iconSize() const // 設置選項卡上顯示的圖標大小 void QTabWidget::setIconSize(const QSize &size)// 判斷用戶是否可以在選項卡區域內移動選項卡, 可以返回true, 否則返回false bool QTabWidget::isMovable() const; // 此屬性用于設置用戶是否可以在選項卡區域內移動選項卡。默認情況下,此屬性為false; void QTabWidget::setMovable(bool movable);// 判斷選項卡是否可以自動隱藏, 如果可以自動隱藏返回true, 否則返回false bool QTabWidget::tabBarAutoHide() const; // 如果為true,則當選項卡欄包含少于2個選項卡時,它將自動隱藏。默認情況下,此屬性為false。 void QTabWidget::setTabBarAutoHide(bool enabled);// 判斷index對應的選項卡是否是被啟用的, 如果是被啟用的返回true, 否則返回false bool QTabWidget::isTabEnabled(int index) const; // 如果enable為true,則在索引位置的頁面是啟用的;否則,在位置索引處的頁面將被禁用。 void QTabWidget::setTabEnabled(int index, bool enable);// 得到index位置的標簽對應的圖標 QIcon QTabWidget::tabIcon(int index) const; // 在位置索引處設置標簽的圖標。 void QTabWidget::setTabIcon(int index, const QIcon &icon);/* 選項卡標簽的位置通過枚舉值進行指定, 可使用的選項如下:- QTabWidget::North: 北(上), 默認- QTabWidget::South: 南(下)- QTabWidget::West: 西(左)- QTabWidget::East: 東(右) */ // 得到選項卡中顯示的標簽的位置, 即: 東, 西, 南, 北 TabPosition QTabWidget::tabPosition() const; // 設置選項卡中標簽顯示的位置, 默認情況下,此屬性設置為North。 void QTabWidget::setTabPosition(TabPosition);/* 選項卡標簽的形狀通過枚舉值進行指定, 可使用的選項如下:- QTabWidget::Rounded: 標簽以圓形的外觀繪制。這是默認形狀- QTabWidget::Triangular: 選項卡以三角形外觀繪制。 */ // 獲得選項卡標簽的形狀 TabShape QTabWidget::tabShape() const; // 設置選項卡標簽的形狀 void QTabWidget::setTabShape(TabShape s);// 得到index位置的標簽的標題 QString QTabWidget::tabText(int index) const; // 設置選項卡index位置的標簽的標題 void QTabWidget::setTabText(int index, const QString &label);// 獲取index對應的標簽頁上設置的提示信息 QString QTabWidget::tabToolTip(int index) const; // 設置選項卡index位置的標簽的提示信息(鼠標需要懸停在標簽上一定時長才能顯示) void QTabWidget::setTabToolTip(int index, const QString &tip);// 判斷選項卡標簽也上是否有關閉按鈕, 如果有返回true, 否則返回false bool QTabWidget::tabsClosable() const; // 設置選項卡的標簽頁上是否顯示關閉按鈕, 該屬性默認情況下為false void QTabWidget::setTabsClosable(bool closeable);// 判斷選項卡欄中是否有滾動按鈕, 如果有返回true, 否則返回false bool QTabWidget::usesScrollButtons() const; // 設置選項卡欄有許多標簽時,它是否應該使用按鈕來滾動標簽。 // 當一個選項卡欄有太多的標簽時,選項卡欄可以選擇擴大它的大小,或者添加按鈕,讓標簽在選項卡欄中滾動。 void QTabWidget::setUsesScrollButtons(bool useButtons);// 判斷窗口是否設置了文檔模式, 如果設置了返回true, 否則返回false bool QTabWidget::documentMode() const; // 此屬性保存選項卡小部件是否以適合文檔頁面的模式呈現。這與macOS上的文檔模式相同。 // 不設置該屬性, QTabWidget窗口是帶邊框的, 如果設置了該屬性邊框就沒有了。 void QTabWidget::setDocumentMode(bool set);?信號
// 每當當前頁索引改變時,就會發出這個信號。參數是新的當前頁索引位置,如果沒有新的索引位置,則為-1
[signal] void QTabWidget::currentChanged(int index);
// 當用戶單擊索引處的選項卡時,就會發出這個信號。index指所單擊的選項卡,如果光標下沒有選項卡,則為-1。
[signal] void QTabWidget::tabBarClicked(int index)
// 當用戶雙擊索引上的一個選項卡時,就會發出這個信號。
// index是單擊的選項卡的索引,如果光標下沒有選項卡,則為-1。
[signal] void QTabWidget::tabBarDoubleClicked(int index);
// 此信號在單擊選項卡上的close按鈕時發出。索引是應該被刪除的索引。 ?? ?
[signal] void QTabWidget::tabCloseRequested(int index);
槽函數
?
?7、QStackedWidget
QStackedWidget 棧類型窗口,在這種類型的窗口中可以存儲多個子窗口,但是只有其中某一個可以被顯示出來,至于是哪個子窗口被顯示,需要在程序中進行控制,在這種類型的窗口中沒有直接切換子窗口的按鈕或者標簽。
// 構造函數 QStackedWidget::QStackedWidget(QWidget *parent = Q_NULLPTR);// 公共成員函數 // 在棧窗口中后邊添加一個子窗口, 返回這個子窗口在棧窗口中的索引值(從0開始計數) int QStackedWidget::addWidget(QWidget *widget); // 將子窗口widget插入到棧窗口的index位置 int QStackedWidget::insertWidget(int index, QWidget *widget); // 將子窗口widget從棧窗口中刪除 void QStackedWidget::removeWidget(QWidget *widget);// 返回棧容器窗口中存儲的子窗口的個數 int QStackedWidget::count() const; // 得到當前棧窗口中顯示的子窗口的索引 int QStackedWidget::currentIndex() const; // 得到當前棧窗口中顯示的子窗口的指針(窗口地址) QWidget *QStackedWidget::currentWidget() const; // 基于索引index得到棧窗口中對應的子窗口的指針 QWidget *QStackedWidget::widget(int index) const; // 基于子窗口的指針(實例地址)得到其在棧窗口中的索引 int QStackedWidget::indexOf(QWidget *widget) const;// 信號 // 切換棧窗口中顯示子窗口, 該信息被發射出來, index為新的當前窗口對應的索引值 [signal] void QStackedWidget::currentChanged(int index); // 當棧窗口的子窗口被刪除, 該信號被發射出來, index為被刪除的窗口對應的索引值 [signal] void QStackedWidget::widgetRemoved(int index);// 槽函數 // 基于子窗口的index索引指定當前棧窗口中顯示哪一個子窗口 [slot] void QStackedWidget::setCurrentIndex(int index); [slot] void QStackedWidget::setCurrentWidget(QWidget *widget); MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// 設置默認顯示的窗口ui->stackedWidget->setCurrentWidget(ui->window1);connect(ui->showWin1, &QPushButton::clicked, this, [=](){// 切換顯示第一個子窗口ui->stackedWidget->setCurrentIndex(0);});connect(ui->showWin2, &QPushButton::clicked, this, [=](){// 切換顯示第二個子窗口, 調用這兩個槽函數中的任何一個都可以ui->stackedWidget->setCurrentWidget(ui->window2);}); }?
總結
以上是生活随笔為你收集整理的Qt 中容器类型的控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QToolButton设置背景无效的思考
- 下一篇: QJason