基本Widgets(07):【類】QToolButton [官翻]
技術標籤:Qt
文章目錄
QToolButton Class
QToolButton類提供了命令或選項的快速訪問按鈕,通常在QToolBar中使用。
Header | #include < QToolButton > |
---|---|
qmake | QT += widgets |
Inherits | QAbstractButton |
Inherited By |
詳細說明
工具按鈕是一種特殊的按鈕,它提供對特定命令或選項的快速訪問。與普通的命令按鈕不同,工具按鈕通常不顯示文字標籤,而是顯示一個圖示。
當使用QToolBar::addAction()建立新的QAction例項或使用QToolBar::addAction()將現有操作新增到工具欄時,通常會建立工具按鈕。還可以以與任何其他小部件相同的方式構造工具按鈕,並在佈局中將它們與其他小部件一起排列。
工具按鈕的一個典型用法是選擇工具;例如,繪圖程式中的“鋼筆”工具。這可以通過使用QToolButton作為切換按鈕來實現(參見setCheckable())。
QToolButton支援auto-raising。在自動升起模式下,只有當滑鼠指向該按鈕時,該按鈕才繪製3D幀。當在QToolBar中使用按鈕時,該特性將自動開啟。用setAutoRaise()替換它。
工具按鈕的圖示設定為QIcon。這使得可以為禁用狀態和啟用狀態指定不同的畫素圖。當按鈕的功能不可用時,禁用的畫素圖將被使用。當滑鼠指標懸停在按鈕上,按鈕自動彈出時,活動的畫素圖將顯示出來。
該按鈕的外觀和尺寸可以通過setToolButtonStyle()和setIconSize()進行調整。當在QMainWindow的QToolBar中使用時,該按鈕會自動調整到QMainWindow的設定(參見QMainWindow::setToolButtonStyle()和QMainWindow:: setIconSize())。除了圖示,工具按鈕還可以顯示用arrowType指定的箭頭符號。
工具按鈕可以在彈出選單中提供額外的選擇。可以使用setMenu()設定彈出選單。使用setPopupMode()來配置工具按鈕的不同模式。預設模式是DelayedPopupMode,有時在web瀏覽器中與“Back”按鈕一起使用。在按下並按住按鈕一段時間後,會彈出一個選單,顯示可以跳轉的頁面列表。超時取決於樣式,參見QStyle::SH_ToolButton_PopupDelay。
Qt Assistant的工具欄包含與主視窗其他部分使用的操作相關的工具按鈕。 |
公共型別
-
enum ToolButtonPopupMode { DelayedPopup, MenuButtonPopup, InstantPopup }
Constant Value Description DelayedPopup 0 按住工具按鈕一段時間後(超時時間取決於樣式,參見QStyle::SH_ToolButton_PopupDelay),彈出選單。一個典型的應用程式示例是一些web瀏覽器工具欄中的“後退”按鈕。如果使用者單擊它,瀏覽器將簡單地返回到前一個頁面。如果使用者按下並按住按鈕一段時間,工具按鈕將顯示一個包含當前歷史列表的選單 MenuButtonPopup 1 在這種模式下,工具按鈕顯示一個特殊的箭頭,表示有一個選單。當按下按鈕的箭頭部分時,將顯示選單。 InstantPopup 2 當按下工具按鈕時,選單立即顯示出來。在這種模式下,按鈕本身的動作不會被觸發。
屬性
-
arrowType: Qt::ArrowType 按鈕是否顯示箭頭而不是普通圖示
這將顯示一個箭頭作為QToolButton的圖示。
預設情況下,這個屬性被設定為Qt::NoArrow。
enum Qt::ArrowTypeConstant Value Qt::NoArrow 0 Qt::UpArrow 1 Qt::DownArrow 2 Qt::LeftArrow 3 Qt::RightArrow 4 Access functions:
- Qt::ArrowType arrowType() const
- void setArrowType(Qt::ArrowType type)
-
autoRaise: bool 是否啟用自動抬起。
預設為禁用(即false)。當使用QMacStyle時,此屬性目前在macOS上被忽略。
Access functions:- bool autoRaise() const
- void setAutoRaise(bool enable)
-
popupMode: ToolButtonPopupMode 描述將彈出式選單與工具按鈕一起使用的方式
預設情況下,此屬性被設定為DelayedPopup。
Access functions:- QToolButton::ToolButtonPopupMode popupMode() const
- void setPopupMode(QToolButton::ToolButtonPopupMode mode)
-
toolButtonStyle: Qt::ToolButtonStyle 僅顯示圖示、僅顯示文字,還是顯示圖示旁邊/下面的文字
預設是Qt::ToolButtonIconOnly。要讓工具按鈕的樣式跟隨系統設定,設定這個屬性為Qt::ToolButtonFollowStyle。在Unix上,將使用桌面環境中的使用者設定。在其他平臺上,Qt::ToolButtonFollowStyle意味著只使用圖示。
QToolButton自動將這個插槽連線到它所在的QMainWindow中的相關訊號。
公共函式
構造析構
- QToolButton(QWidget *parent = nullptr)
- virtual ~QToolButton()
屬性訪問
- Qt::ArrowType arrowType() const
- void setArrowType(Qt::ArrowType type)
- bool autoRaise() const
- void setAutoRaise(bool enable)
- QToolButton::ToolButtonPopupMode popupMode() const
- void setPopupMode(QToolButton::ToolButtonPopupMode mode)
- Qt::ToolButtonStyle toolButtonStyle() const
特殊
- QAction * defaultAction() const
- QMenu * menu() const
- void setMenu(QMenu *menu)
重寫的公共函式
- virtual QSize minimumSizeHint() const override
- virtual QSize sizeHint() const override
公共槽
-
void setDefaultAction(QAction *action) 將預設動作設定為action
如果一個工具按鈕有一個預設的動作,這個動作定義了這個按鈕的以下屬性:-
checked
-
enabled
-
font
-
icon
-
popupMode (假設該操作有一個選單)
-
statusTip
-
text
-
toolTip
-
whatsThis
其他屬性(如autoRepeat)不受操作的影響。
-
-
void setToolButtonStyle(Qt::ToolButtonStyle style)checkable 見屬性
-
void showMenu() 顯示(彈出)相關的彈出選單
如果沒有這樣的選單,這個函式將什麼也不做。這個函式直到彈出選單被使用者關閉才會返回。
訊號
- void triggered(QAction *action) 當給定的action被觸發時,訊號被髮出
該操作還可以與使用者介面的其他部分相關聯,例如選單項和鍵盤快捷鍵。以這種方式共享操作有助於使使用者介面更加一致,而且通常實現起來更省事。
保護的函式
- void initStyleOption(QStyleOptionToolButton *option) const
重寫的保護的函式
- virtual void actionEvent(QActionEvent *event) override
- virtual void changeEvent(QEvent *e) override
- virtual void enterEvent(QEvent *e) override
- virtual bool event(QEvent *event) override
- virtual bool hitButton(const QPoint &pos) const override
- virtual void leaveEvent(QEvent *e) override
- virtual void mousePressEvent(QMouseEvent *e) override
- virtual void mouseReleaseEvent(QMouseEvent *e) override
- virtual void nextCheckState() override
- virtual void paintEvent(QPaintEvent *event) override
- virtual void timerEvent(QTimerEvent *e) override
小案例
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationName ("QRadioButton");
QWidget w;
QToolButton cb1,cb2,cb3;
QMenu menu("Tool");
menu.addAction ("Pen");
menu.addAction ("Pencil");
cb1.setMenu (&menu);
cb1.setPopupMode (QToolButton::DelayedPopup);
cb2.setMenu (&menu);
cb2.setPopupMode (QToolButton::MenuButtonPopup);
cb3.setMenu (&menu);
cb3.setPopupMode (QToolButton::InstantPopup);
QCommonStyle cs;
QIcon icon = cs.standardIcon ((QStyle::StandardPixmap) 0);
cb1.setIcon (icon);
icon = cs.standardIcon ((QStyle::StandardPixmap) 13);
cb2.setIcon (icon);
icon = cs.standardIcon ((QStyle::StandardPixmap) 34);
cb3.setIcon (icon);
// cb1.setArrowType (Qt::UpArrow);
// cb2.setArrowType (Qt::LeftArrow);
// cb3.setArrowType (Qt::RightArrow);
QHBoxLayout mainLayout;
mainLayout.addWidget (&cb1);
mainLayout.addWidget (&cb2);
mainLayout.addWidget (&cb3);
w.setLayout (&mainLayout);
w.resize (300,20);
w.show ();
return a.exec();
}