1. 程式人生 > 其它 >基本Widgets(07):【類】QToolButton [官翻]

基本Widgets(07):【類】QToolButton [官翻]

技術標籤:Qt

文章目錄

QToolButton Class

QToolButton類提供了命令或選項的快速訪問按鈕,通常在QToolBar中使用。

Header#include < QToolButton >
qmakeQT += widgets
InheritsQAbstractButton
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's toolbar with tool buttons
Qt Assistant的工具欄包含與主視窗其他部分使用的操作相關的工具按鈕。

公共型別

  • enum ToolButtonPopupMode { DelayedPopup, MenuButtonPopup, InstantPopup }

    描述如何彈出具有選單集或包含操作列表的工具按鈕的選單。

    ConstantValueDescription
    DelayedPopup0按住工具按鈕一段時間後(超時時間取決於樣式,參見QStyle::SH_ToolButton_PopupDelay),彈出選單。一個典型的應用程式示例是一些web瀏覽器工具欄中的“後退”按鈕。如果使用者單擊它,瀏覽器將簡單地返回到前一個頁面。如果使用者按下並按住按鈕一段時間,工具按鈕將顯示一個包含當前歷史列表的選單
    MenuButtonPopup1在這種模式下,工具按鈕顯示一個特殊的箭頭,表示有一個選單。當按下按鈕的箭頭部分時,將顯示選單。
    InstantPopup2當按下工具按鈕時,選單立即顯示出來。在這種模式下,按鈕本身的動作不會被觸發。

屬性

  1. arrowType: Qt::ArrowType 按鈕是否顯示箭頭而不是普通圖示
    這將顯示一個箭頭作為QToolButton的圖示。
    預設情況下,這個屬性被設定為Qt::NoArrow。
    enum Qt::ArrowType

    ConstantValue
    Qt::NoArrow0
    Qt::UpArrow1
    Qt::DownArrow2
    Qt::LeftArrow3
    Qt::RightArrow4

    Access functions:

    • Qt::ArrowType arrowType() const
    • void setArrowType(Qt::ArrowType type)
  2. autoRaise: bool 是否啟用自動抬起
    預設為禁用(即false)。當使用QMacStyle時,此屬性目前在macOS上被忽略。
    Access functions:

    • bool autoRaise() const
    • void setAutoRaise(bool enable)
  3. popupMode: ToolButtonPopupMode 描述將彈出式選單與工具按鈕一起使用的方式
    預設情況下,此屬性被設定為DelayedPopup。
    Access functions:

    • QToolButton::ToolButtonPopupMode popupMode() const
    • void setPopupMode(QToolButton::ToolButtonPopupMode mode)
  4. toolButtonStyle: Qt::ToolButtonStyle 僅顯示圖示、僅顯示文字,還是顯示圖示旁邊/下面的文字
    預設是Qt::ToolButtonIconOnly。

    要讓工具按鈕的樣式跟隨系統設定,設定這個屬性為Qt::ToolButtonFollowStyle。在Unix上,將使用桌面環境中的使用者設定。在其他平臺上,Qt::ToolButtonFollowStyle意味著只使用圖示。

    QToolButton自動將這個插槽連線到它所在的QMainWindow中的相關訊號。

公共函式

構造析構

  1. QToolButton(QWidget *parent = nullptr)
  2. virtual ~QToolButton()

屬性訪問

  1. Qt::ArrowType arrowType() const
  2. void setArrowType(Qt::ArrowType type)
  3. bool autoRaise() const
  4. void setAutoRaise(bool enable)
  5. QToolButton::ToolButtonPopupMode popupMode() const
  6. void setPopupMode(QToolButton::ToolButtonPopupMode mode)
  7. Qt::ToolButtonStyle toolButtonStyle() const

特殊

  1. QAction * defaultAction() const
  2. QMenu * menu() const
  3. void setMenu(QMenu *menu)

重寫的公共函式

  1. virtual QSize minimumSizeHint() const override
  2. virtual QSize sizeHint() const override

公共槽

  1. void setDefaultAction(QAction *action) 將預設動作設定為action
    如果一個工具按鈕有一個預設的動作,這個動作定義了這個按鈕的以下屬性:

    • checked

    • enabled

    • font

    • icon

    • popupMode (假設該操作有一個選單)

    • statusTip

    • text

    • toolTip

    • whatsThis
      其他屬性(如autoRepeat)不受操作的影響。

  2. void setToolButtonStyle(Qt::ToolButtonStyle style)checkable 見屬性

  3. void showMenu() 顯示(彈出)相關的彈出選單
    如果沒有這樣的選單,這個函式將什麼也不做。這個函式直到彈出選單被使用者關閉才會返回。

訊號

  1. void triggered(QAction *action) 當給定的action被觸發時,訊號被髮出
    該操作還可以與使用者介面的其他部分相關聯,例如選單項和鍵盤快捷鍵。以這種方式共享操作有助於使使用者介面更加一致,而且通常實現起來更省事。

保護的函式

  1. void initStyleOption(QStyleOptionToolButton *option) const

重寫的保護的函式

  1. virtual void actionEvent(QActionEvent *event) override
  2. virtual void changeEvent(QEvent *e) override
  3. virtual void enterEvent(QEvent *e) override
  4. virtual bool event(QEvent *event) override
  5. virtual bool hitButton(const QPoint &pos) const override
  6. virtual void leaveEvent(QEvent *e) override
  7. virtual void mousePressEvent(QMouseEvent *e) override
  8. virtual void mouseReleaseEvent(QMouseEvent *e) override
  9. virtual void nextCheckState() override
  10. virtual void paintEvent(QPaintEvent *event) override
  11. 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();
}