混合方式设计UI
资源文件导入
设计Action
设计菜单和工具栏
代码创建其他界面组件
QLabel *flabCurFile;//状态栏显示当前文件的Label
QProgressBar *progressBar1;//状态栏上的进度条
QSpinBox *spinFontSize;//字体大小spinBox
QFontComboBox *comboFont;//字体名称comboBox
void iniUI();
void QWMainWindow::iniUI()
{
//状态栏上添加组件
flabCurFile=new QLabel;
flabCurFile->setMinimumHeight(150);
flabCurFile->setText("当前文件:");
ui->statusBar->addWidget(flabCurFile);//添加到状态栏
progressBar1=new QProgressBar;//进度条
progressBar1->setMaximumWidth(200);//组件最大宽度
progressBar1->setMinimum(5);
progressBar1->setMaximum(50);
progressBar1->setValue(ui->txtEdit->font().pointSize());//设置初始值
ui->statusBar->addWidget(progressBar1);//进度条添加到状态栏
//工具栏上添加组件
spinFontSize=new QSpinBox;//文字大小 SpinBox
spinFontSize->setMinimum(5);
spinFontSize->setMaximum(50);
spinFontSize->setValue(ui->txtEdit->font().pointSize());//设置初始值
spinFontSize->setMinimumWidth(50);//组件最小宽度
ui->mainToolBar->addWidget(new QLabel("字体大小"));//不引用Label无需定义变量
ui->mainToolBar->addWidget(spinFontSize);//SpinBox添加到工具栏
//进度条数值与字体大小的关系
//进度条0-100;
//字体5-50;
ui->mainToolBar->addSeparator();//分隔条
ui->mainToolBar->addWidget(new QLabel("字体"));//不引用Label无需定义变量
comboFont=new QFontComboBox;
comboFont->setMinimumWidth(150);
ui->mainToolBar->addWidget(comboFont);//添加到工具栏
setCentralWidget(ui->txtEdit); //将txtEdit设置为中心组件,自动填充整个工作区
}
## Action功能实现
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181127142314695.png)
void QWMainWindow::on_actFontBold_triggered(bool checked)
{
QTextCharFormat fmt;
fmt=ui->txtEdit->currentCharFormat();
if(checked)
fmt.setFontWeight(QFont::Bold);
else
fmt.setFontWeight(QFont::Normal);
ui->txtEdit->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
}
void QWMainWindow::on_actFontItalic_triggered(bool checked)
{
QTextCharFormat fmt;
fmt=ui->txtEdit->currentCharFormat();
if(checked)
fmt.setFontItalic(true);
else
fmt.setFontItalic(false);
ui->txtEdit->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
}
void QWMainWindow::on_actFontUnder_triggered(bool checked)
{
QTextCharFormat fmt;
fmt=ui->txtEdit->currentCharFormat();
if(checked)
fmt.setFontUnderline(true);
else
fmt.setFontUnderline(false);
ui->txtEdit->mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式
}
void QWMainWindow::on_txtEdit_copyAvailable(bool b)//在有内容时可以被复制时发射,并且传递一个布尔参数,
//可以通过此信号来改变actCut,actCopy的enabled属性
{
ui->actCut->setEnabled(b);
ui->actCopy->setEnabled(b);
ui->actPaste->setEnabled(ui->txtEdit->canPaste());//改变actPaste()的enabled属性的方法不一样
}
void QWMainWindow::on_actOpen_triggered()
{
QString curPath,aFileName;
curPath=QCoreApplication::applicationDirPath();//获取应用程序路径
//调用打开文件对话框打开文件
//加入头文件#include<QFileDialog>
aFileName=QFileDialog::getOpenFileName(this,tr("打开一个文件"),curPath,
"C++程序文件(*.cpp);;H头文件(*.h);;文本文件(*.txt);;所有文件(*.*)");
if(!aFileName.isEmpty())
{
QFile aFile(aFileName);//以文件流方式读出
if(aFile.open(QIODevice::ReadWrite|QIODevice::Text))
{
QTextStream aStream(&aFile);//加入头文件#include<QTextStream>
aStream.setAutoDetectUnicode(true);//自动检测Unicode
ui->txtEdit->clear();
while(!aStream.atEnd())
{
ui->txtEdit->append(aStream.readLine());//读取一个文本行
}
//updateCurFile(aFileName); //更新状态栏显示
}
aFile.close();
}
}
void QWMainWindow::on_txtEdit_selectionChanged()
{
//更新粗体、斜体、下划线三种action的checked属性
QTextCharFormat fmt;
fmt=ui->txtEdit->currentCharFormat();//获取文字格式
ui->actFontItalic->setChecked(fmt.fontItalic());//是否斜体
ui->actFontBold->setChecked(fmt.font().bold());//是否粗体
ui->actFontUnder->setChecked(fmt.fontUnderline());//是否有下划线
}
手工创建组件的信号与槽
//设置字体大小的SpinBox组件使用信号valueChanged(int)
//设置字体的FontComboBox组件使用信号currentIndexChanged(QString)
//首先在类中定义两个槽函数
private slots:
void on_spinBoxFontSize_valueChanged(int aFontSize);//改变字体大小
void on_comboFont_currentIndexChanged(const QString &arg1);//改变字体类型
//其次关联信号与槽
void on_txtEdit_selectionChanged();
private:
void iniSignalSlots();
//然后在构造函数中调用iniSignalSlots()函数
//实现手工创建的组件信号与槽关联
iniSignalSlots();
void QWMainWindow::iniSignalSlots()
{
//信号与槽关联
connect(spinFontSize,SIGNAL(valueChanged(int)),this,SLOT(on_spinBoxFontSize_valueChanged(int)));
connect(comboFont,SIGNAL(currentIndexChanged(const QString &)),this,SLOT(on_comboFont_currentIndexChanged(const QString &)));
}
void QWMainWindow::on_spinBoxFontSize_valueChanged(int aFontSize)
{
//改变字体大小的SpinBox
QTextCharFormat fmt;
fmt.setFontPointSize(aFontSize);//获取字体大小的数值
ui->txtEdit->mergeCurrentCharFormat(fmt);//设置字体大小
progressBar1->setValue(aFontSize);//改变进度条的数值
}
void QWMainWindow::on_comboFont_currentIndexChanged(const QString &arg1)
{
//FontComboBox的响应,选择字体
QTextCharFormat fmt;
fmt.setFontFamily(arg1);//获取字体名称
ui->txtEdit->mergeCurrentCharFormat(fmt);//设置字体类型
}
编译结果