(1)先给出综述 , QToolButton 的源码阅读在这里 :
++
(2)给出 本项目的源代码,本项目完整演示了 QToolButton :
++
++ mainwindow.cpp 文件太大,以代码形式展示 :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTime>
#include <QActionGroup>
#include <QSpinBox>
#include <QLabel>
#include <QProgressBar>
#include <QMenu>
MainWindow::~MainWindow() { delete ui; }
MainWindow::MainWindow(QWidget * parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->toolButton_Date->setDefaultAction(ui->actionDate); //关联 toolButton与 QAction
ui->toolButton_Time->setDefaultAction(ui->actionTime);
QMenu * menuDateTime = new QMenu(this) ; //此菜单供三个 toolButton共用
menuDateTime->addAction(ui->actionDate);
menuDateTime->addAction(ui->actionTime);
//工具栏里的此 toolButton采用延迟弹出属性
QToolButton * toolButtonMenu = new QToolButton(this);
toolButtonMenu->setMenu(menuDateTime); //不设置箭头属性了,因为会遮盖绑定 QAction的图标
toolButtonMenu->setPopupMode(QToolButton::DelayedPopup);
toolButtonMenu->setDefaultAction(ui->actionHaha); //测试证明: 延迟弹出的菜单不影响 action的使用
toolButtonMenu->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
ui->toolBar->addSeparator(); //把代码生成的 QToolButton按钮控件添加进工具栏
ui->toolBar->addWidget(toolButtonMenu);
ui->toolButton_DateTime->setMenu(menuDateTime); //UI界面固定为 MenuButtonPopup 模式
ui->toolButton_DateTime->setDefaultAction(ui->actionHold_on); //给按钮个 QAction
ui->toolButton_Hold ->setMenu(menuDateTime); //因为是立即触发,QAction不会被执行了。
ui->toolButton_Hold ->setDefaultAction(ui->actionHold_on);
}
void MainWindow::on_actionDate_triggered()
{ ui->pushButton->setText(QDate::currentDate().toString()); }
void MainWindow::on_actionTime_triggered()
{ ui->pushButton->setText(QTime::currentTime().toString()); }
void MainWindow::on_actionHaha_triggered()
{ ui->pushButton->setText("哈哈") ; }
void MainWindow::on_actionHold_on_triggered()
{ ui->pushButton->setText("Hold_on, please"); }
void MainWindow::on_toolButton_Time_triggered(QAction * arg1) { qDebug() << arg1; }
(3)
谢谢