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文件操做会在后面说。