学习QT

混合方式设计UI

资源文件导入

学习QT

设计Action

学习QT

设计菜单和工具栏

学习QT

代码创建其他界面组件

  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);//设置字体类型
}


编译结果

学习QT