【qt】最快的开发界面效率——混合编程3

简介: 【qt】最快的开发界面效率——混合编程

【qt】最快的开发界面效率——混合编程2:https://developer.aliyun.com/article/1507183

四.完成界面的功能

1.对action配置信号槽

在这里有一个信号槽编辑器

这里可以进行信号槽的添加

对于信号和槽函数,qt内部都已经实现好的,才可以在这里直接进行配置。


这里我们就对剪切复制退出清空粘贴进行了添加

因为这些槽函数对应的接收者有对应的槽函数

对于action有一个共同的信号就是triggered触发器

运行结果:

点击清空就没了

2.对action转到信号槽

OK,接下来,就是我们想要实现的功能,qt组件内部没有对应的函数,那就只能我们手动去写了

但是还是有action的触发器信号

我们可以直接在action上点击转到槽

对于下划线,粗体,斜体因为有两种状态,我们用triggered(bool)这个信号。

新建的槽函:

void MainWindow::on_actionNew_triggered()
{
    ui->textEdit->clear();//将当前的文本清空
    fileName->setText("当前文件");//文件名也清空
}

打开文件的槽函数:

void MainWindow::on_actionOpen_triggered()
{
    //打开一个文件并获取路径
    QString FileName=QFileDialog::getOpenFileName(this,"打开一个文件");
    if(!FileName.isEmpty())//如果路径不为空
    {
        QFile file(FileName);//创建一个文件对象用路径名初始化
        if(file.open(QIODevice::ReadWrite|QIODevice::Text))//打开文件
        {
            QTextStream stream(&file);//创建一个文件流对象
            while(!stream.atEnd())//如果没有读到结尾
            {
                ui->textEdit->append(stream.readLine());//将读的每行添加到文件流中,然后尾部追加到文本编辑器中
            }
             fileName->setText("当前文件:"+FileName);//将当前的文件名进行修改
        }
        file.close();//关闭文件
    }
   
}

3个字体样式的槽函数:

void MainWindow::on_actionBold_triggered(bool checked)
{
    auto format=ui->textEdit->currentCharFormat();//获取光标位置的字体样式
    format.setFontWeight(checked?QFont::Bold:QFont::Normal);//根据状态修改成粗体样式
    ui->textEdit->mergeCurrentCharFormat(format);//将修改后样式合并到字体样式中
}

void MainWindow::on_actionItalic_triggered(bool checked)
{
    auto format=ui->textEdit->currentCharFormat();
    format.setFontItalic(checked);
    ui->textEdit->mergeCurrentCharFormat(format);
}

void MainWindow::on_actionUnderLine_triggered(bool checked)
{
    auto format=ui->textEdit->currentCharFormat();
    format.setFontUnderline(checked);
    ui->textEdit->mergeCurrentCharFormat(format);
}

我注释写的这么详细,我就不讲了,如果有不懂的地方可以问我。

运行效果:

打开一个文件和3种样式可以完了,你们可以多玩玩,哈哈。

3.代码添加的组件手动关联槽函数

像我们自己手动添加的组件,我们必须要手动的关联和定义槽函数

字体大小和字体的样式本身有信号,所以不用我们进行手动的添加

先定义槽函数:

void on_spinBoxFontSize_valueChanged(int size);
void on_fontBox_currentIndexChanged(const QString & fontStyle);

然后关联:

void MainWindow::initSignalSlots()
{
    connect(spinBoxFontSize,SIGNAL(valueChanged(int)),
            this,SLOT(on_spinBoxFontSize_valueChanged(int)));
    connect(fontBox,SIGNAL(currentIndexChanged(const QString &)),
            this,SLOT(on_fontBox_currentIndexChanged(const QString &)));
}

最后实现槽函数:

void MainWindow::on_spinBoxFontSize_valueChanged(int size)
{
    QTextCharFormat format;
    format.setFontPointSize(size);//根据发来的信号设置文本的大小
    ui->textEdit->mergeCurrentCharFormat(format);//将字体大小合并到文本
    progressBar->setValue(size);//设置进度条的值

}

void MainWindow::on_fontBox_currentIndexChanged(const QString &fontStyle)
{
    QTextCharFormat format;
    format.setFontFamily(fontStyle);
    ui->textEdit->mergeCurrentCharFormat(format);
}

运行效果:

现在就可以尽情的玩耍了,功能都有了,你也试试看吧!

五.补充

1.样式选择问题

现在还是会有一点小bug,就是如果我点了斜体,粗体,下划线,我选择其他文本文字,他们的状态还是一直点着的。

我们可以用文本编辑器的一个转到槽,有个文本选择改变信号

实现槽函数:

void MainWindow::on_textEdit_selectionChanged()
{
    //先获取当前文本格式
    auto format=ui->textEdit->currentCharFormat();
    //根据当前的文本判断是否设置了样式
    ui->actionBold->setChecked(format.font().bold());
    ui->actionItalic->setChecked(format.fontItalic());
    ui->actionUnderLine->setChecked(format.fontUnderline());
}

效果:

2.复制粘贴剪切可选

现在有一个需求就是当我们选择文本才可以复制剪切

文本编辑器也有一个信号就是能否复制

实现槽函数:

void MainWindow::on_textEdit_copyAvailable(bool b)
{
    ui->actionCut->setEnabled(b);//如果可以复制就可以使用剪切
    
    ui->actionCopy->setEnabled(b);//如果可以复制就复制
    
    ui->actionPaste->setEnabled(ui->textEdit->canPaste());//如果可以粘贴的时候就设置可以
}

效果:

现在剪切和复制就用不了了,选中就又可以复制和剪切了。

3.图标

扩充内容,最后咱们来搞一个图标。

点击这里可以将图片转换成ico图标格式

然后保存到项目同目录下

在pro文件中加一个模块

等于后面与保存在同目录下的名字相同

顺便加一个窗口主题名:

运行结果:

帅呆了,太酷了!

哎呀,其他功能你们做好了,自己玩,我不想截图了…

六.总结

很明显,ui设计器的开发效率极快,但是有的界面只能用代码实现,如我们这个项目中,向工具栏和状态栏里面添加组件时,只能用代码来实现。

总的来说一句话:能用ui设计器的就尽量用,不能用的就用代码!


花了一天的时间,终于写完了,今天星期天,咱们的设计界面就完结撒花了,真的是太累了。确实接口有点多,容易记混,不过慢慢来,重要的是思想!

OK,就到这里吧!(* ̄︶ ̄)

相关文章
|
8天前
|
搜索推荐
【qt】自定义界面类
【qt】自定义界面类
12 0
|
22天前
【qt】最快的开发界面效率——混合编程2
【qt】最快的开发界面效率——混合编程
28 1
|
22天前
【qt】最快的开发界面效率——混合编程1
【qt】最快的开发界面效率——混合编程
30 0
|
22天前
【qt】设计器实现界面
【qt】设计器实现界面
14 1
|
22天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
44 1
|
22天前
|
开发框架 Linux C++
Qt:强大的跨平台C++应用程序开发框架
Qt:强大的跨平台C++应用程序开发框架
55 3
|
22天前
|
开发框架 数据可视化 编译器
Qt的魅力:探索跨平台图形界面开发之旅
Qt的魅力:探索跨平台图形界面开发之旅
43 1
|
22天前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
37 0
|
22天前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
53 8
C++ Qt开发:QTcpSocket网络通信组件
|
22天前
|
图形学 Python 容器
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
79 0