【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,就到这里吧!(* ̄︶ ̄)

相关文章
|
3月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
87 0
|
1月前
|
编译器
【项目开发】QT简单练习之QQ登录界面模仿
为了进一步加深对QT开发的理解,在学习完基础操作之后要进行一个简单的练习。
|
2月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
2月前
|
3月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
140 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
3月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
3月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
178 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
【qt】多窗口开发
【qt】多窗口开发
55 0