1設計目標:ide
2建立項目、添加資源
3設計Action
QAction是一個很是實用的類,在界面設計時,可建立Action,並完成trigger()信號的槽函數。
設計Action的功能:能夠建立菜單欄選項、工具欄按鈕、設置爲QToolButton按鈕的關聯Action,當點擊這些按鈕時就會執行Action的槽函數。函數
一、添加Action
2設計菜單欄
3添加一些沒法其餘組件
例如:你須要在工具欄中添加Spinbox用於設置字體大小、FontcomboBox來選擇字體,在狀態欄中添加Lable、ProgreeBar和獲取系統時間並動態顯示在窗口狀態欄,可是窗體組件是拒絕添加的,面對這種狀況,咱們須要編寫相應代碼來完成啦。工具
.h字體
#include <QLabel> #include <QProgressBar> #include <QSpinBox> #include <QFontComboBox> private slots: void timeUpdate(); private: Ui::MainWindow *ui; //工具欄添加組件 QSpinBox *spinbox; QFontComboBox *Fontbox; //狀態欄添加組件 QLabel *label; QProgressBar *progressBox; QLabel *currentTimeLabel;
.cui
void MainWindow::Init() { //工具欄添加組件 // QSpinBox *spinbox; // QFontComboBox *Fontbox; spinbox=new QSpinBox(); spinbox->setMinimum(8); spinbox->setMaximum(50); spinbox->setValue(ui->textEdit->font().pointSize()); ui->mainToolBar->addWidget(new QLabel("字體大小")); ui->mainToolBar->addWidget(spinbox);//spinbox添加到工具欄 ui->mainToolBar->addSeparator();//添加分隔欄 ui->mainToolBar->addWidget(new QLabel("字體")); Fontbox=new QFontComboBox; Fontbox->setMinimumWidth(150); ui->mainToolBar->addWidget(Fontbox);//Fontbox添加到工具欄 setCentralWidget(ui->textEdit); //狀態欄添加組件 // QLabel *label; // QProgressBar *progressBox; label = new QLabel; label->setMidLineWidth(150); label->setText("當前文件:"); ui->statusBar->addWidget(label);//label添加到狀態欄 progressBox = new QProgressBar; progressBox->setMinimum(5); progressBox->setMaximum(50); progressBox->setMinimumWidth(200); progressBox->setValue(ui->textEdit->font().pointSize()); ui->statusBar->addWidget(progressBox);//progressBox添加到狀態欄 //獲取系統時間並動態顯示在窗口狀態欄 currentTimeLabel=new QLabel; QTimer *timer=new QTimer(this); timer->start(1000); // 每次發射timeout信號時間間隔爲1秒 connect(timer,SIGNAL(timeout()),this,SLOT(timeUpdate())); }
槽函數:this
void MainWindow::timeUpdate() { QDateTime CurrentTime=QDateTime::currentDateTime(); QString Timestr=CurrentTime.toString(" yyyy年-MM月-dd日 hh:mm:ss "); //設置顯示的格式 currentTimeLabel->setText(Timestr); // ui->statusBar->addWidget(currentTimeLabel);//生成在狀態欄的左端 ui->statusBar->addPermanentWidget(currentTimeLabel);//生成在狀態欄的最右端 } }
要在構造函數中調用Init函數。設計
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); Init(); }
運行效果:
4Action功能實現
編輯功能Action功能實現:
其餘Action功能實現:
3d
void MainWindow::on_actBold_triggered(bool checked) { QTextCharFormat fmt; fmt=ui->textEdit->currentCharFormat(); if(checked) { fmt.setFontWeight(QFont::Bold); } else { fmt.setFontWeight(QFont::Normal); } ui->textEdit->mergeCurrentCharFormat(fmt); } void MainWindow::on_actItalic_triggered(bool checked) { Q_UNUSED(checked); QTextCharFormat fmt; if (ui->actItalic->isChecked()) fmt.setFontItalic(true); else fmt.setFontItalic(false); ui->textEdit->mergeCurrentCharFormat(fmt); } void MainWindow::on_actUnline_triggered(bool checked) { Q_UNUSED(checked); QTextCharFormat fmt; if (ui->actUnline->isChecked()) fmt.setFontUnderline(true); else fmt.setFontUnderline(false); ui->textEdit->mergeCurrentCharFormat(fmt); }
5代碼建立的組件信號與槽實現
首先肯定編寫響應代碼:
SpinBox信號:
void valueChanged(int i)code
FontComboBox信號:orm
void valueChanged(int i) 在void MainWindow::Init()中添加信號與槽的鏈接 //字體與大小信號與槽 connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(SpinBox_Valuechage(int))); connect(Fontbox,SIGNAL(currentIndexChanged(const QString &)),this,SLOT(ComboFont_currentIndexchange(const QString &))); 在.cpp中添加槽函數的實現 void MainWindow::SpinBox_Valuechage(int SBoxFontSize) { qDebug()<<"11"; QTextCharFormat format; format.setFontPointSize(SBoxFontSize); ui->textEdit->mergeCurrentCharFormat(format); progressBox->setValue(SBoxFontSize); } //改變字體格式 void MainWindow::ComboFont_currentIndexchange(const QString &arg1) { QTextCharFormat format; format.setFontFamily(arg1); ui->textEdit->mergeCurrentCharFormat(format); }
運行效果:
6在Init函數中添加下面一行實現
ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//顯示文字和圖標
7爲應用程序添加圖標
將圖標文件複製到項目文件目錄下,並在.pro文件中添加RC_ICONS =name.ico。
name是圖片文件名,包括後綴必須是.ico的圖片
8文件操做會在後面說。