QT中QString的练习的解决以及个人总结

本文介绍在QT环境下如何处理字符串,包括大小写转换、数字转换及实数求和,同时演示了去除字符串两端空格、查找并删除子串的方法。

QT中关于字符串的练习

问题描述:

从键盘输入字符串,有小写形式的字母串、大写形式的字母串以及数字形式的字母串,将其转换为大写、小写、整数以及实数类型,并显示输出。

问题解决:
  1. 首先对输入进来的字符串进行循环判断,使用QT中QChar提供的一系列的判断函数。
  2. 由于并没有太过于强调以及特殊要求,所以对于数字形式的判断就是:遇到数字就开始计数,包括小数点,将其转换为实数形式。
  3. 并且是创建ui界面,比硬编码好的多!简单一点,先尝试有ui界面的,嘿嘿嘿。
  • 尚未解决再原有字符串上进行修改后单击按钮得到的数字和不是重新算出来的,而是在原有基础上再次进行加
  • 用正则表达式来进行字符匹配,还没有达到目的,用正则表达式进行匹配并输出
  • 没有实现使用qDebug来实现输出。
    QT控件布局
    在Dialog.h中添加:
#include <QString>
#include <QChar>

给ui界面中的按钮单击右键跳转至槽函数中,给槽函数添加一下代码:

static float sum=0.0;
    int m,n;
    QString str1,str2;
    str1=ui->lin1->text();//获取字符串

    for(int i=0;i<str1.length();i++)//循环判断
    {
        if(str1[i].isLower())
            str1[i]=str1[i].toUpper();
        else if(str1[i].isUpper())
                str1[i]=str1[i].toLower();
            else if(str1[i].isNumber())
                {
                    m=i;//数字开始的位置
                    int k=i;//记录数字结束的位置
                    while(str1[k].isNumber()||str1[k]=='.')
                    {
                        k++;//判断,并记录
                    }
                    n=k-1;//数字的最后一位aDbc123.45
                    sum=sum+str1.mid(m,n-m+1).toFloat();//求和
                    str1=str1.remove(m,n-m+1);//删除数字
                   i--;//修改i的值控制下一轮判断的开始
                }
            }

    ui->lin2->setText(str1);
    ui->lin3->setText(QString::number(sum));
个人总结:

不能太相信老师所提的,所以还是要自己学习,QT的ui界面创建比无ui界面的要简单,所以时间允许的话,可以再考虑考虑硬编码,锻炼一下自己的代码能力、加强QT学习。

问题描述:

输入一个有空格的串S,利用函数去掉左右的空格,再输入一个子串t,查找S中包含的所有t的起始位置,再从S中删除所有的子串t。

问题解决:
  1. 利用QString中的trimmed()函数去掉两端空格
  2. 利用QString中的indexOf()函数检测子串第一次出现的位置
  3. 利用QString中的remove()函数去掉所有出现的子串
  • 尚未解决的是显示所有子串位置的时候没有用空格分开
  • 在检测子串所有位置的时候判断条件复杂化了
  • 在删除子串之后又调用了一次去空格函数
    ui界面布局
    在Dialog.h中添加
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>

在去掉空格的按钮的槽函数中添加:

QString str1,str2;
   str1=ui->lin1->text();//接收输入的字符串

   str2=str1.trimmed();//去掉左右(两端)的空格
    //QMessageBox::about(this,"warning",str2);//测试是否成功
    ui->lin2->setText(str2);

在查找的槽函数中添加代码:

 QString str1,str2,str3,str4,str5;

    str1=ui->lin1->text();

    str2=ui->lin3->text();

    str5=str1;

    int x=str1.indexOf(str2);//检索出第一次位置

    x=str1.indexOf(str2);

    do
    {
        str3+=QString::number(x);
        x=str1.indexOf(str2,x+1);
        ui->lin4->setText(str3);
    }while(x>-1);//查找所有的子串出现的位置

    //删除所有的字符串t
    str4=str5.remove(str2);
    str4=str4.trimmed();
    ui->lin5->setText(str4);

在适当的时候添加代码去调试想要的效果,是在C语言学习时留下来的习惯,有人一直觉得很多余,但是确实,在写代码的时候在调试修改,要花费很大的力气,但是能保证最后的成品是自己想要的,而不是到时候完成后再查找错误。

最后:

希望能够尽自己的努力去把QT学好,也希望有人在我的代码的基础上,进一步帮我解决我尚未解决的问题呀!
也会进一步加强自己的代码能力!
共勉!

<think>我们正在处理用户关于Qt模板练习代码的请求。根据引用[1]中的信息,Qt提供了丰富的网络编程功能,但用户要求的是模板练习代码。模板在Qt中通常指通用编程技术(如类模板、函数模板)或界面模板(如使用Qt Designer创建的.ui文件)。 由于用户没有具体说明是哪种模板,我将提供几个常见的Qt模板练习示例: 1. **类模板示例**:展示如何在Qt中使用C++模板创建通用容器。 2. **界面模板示例**:展示如何使用Qt Designer创建界面,并通过代码加载。 3. **多文档界面(MDI)模板**:展示Qt的MDI应用程序框架。 此外,引用[3]提到了OpenGL在Qt中的使用,因此也可以考虑提供一个简单的OpenGL模板示例。 下面我将分别提供这些示例的代码框架和说明。 ### 1. 类模板示例:通用数组容器 在C++中,我们可以使用模板创建通用容器。以下是一个简单的数组模板类: ```cpp #include <iostream> template <typename T> class Array { public: Array(int size) : size_(size) { data_ = new T[size_]; } ~Array() { delete[] data_; } T& operator[](int index) { return data_[index]; } int size() const { return size_; } private: T* data_; int size_; }; int main() { // 创建整数数组 Array<int> intArray(5); for (int i = 0; i < intArray.size(); ++i) { intArray[i] = i * 2; } // 创建浮点数数组 Array<float> floatArray(3); floatArray[0] = 1.1f; floatArray[1] = 2.2f; floatArray[2] = 3.3f; // 输出 for (int i = 0; i < intArray.size(); ++i) { std::cout << intArray[i] << " "; } std::cout << std::endl; return 0; } ``` ### 2. 界面模板示例:使用Qt Designer创建界面 步骤: 1. 使用Qt Designer设计一个简单的窗口(例如,包含一个按钮和一个标签)。 2. 保存为`mainwindow.ui`。 3. 使用`uic`工具将.ui文件转换为C++头文件(或在编译时自动处理)。 4. 编写代码加载界面。 假设我们有一个名为`demo_ui`的界面(如引用[2]中提到的),我们可以这样加载: ```cpp #include <QApplication> #include <QMainWindow> #include "ui_mainwindow.h" // 由uic生成 int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow window; Ui::MainWindow ui; ui.setupUi(&window); window.show(); return app.exec(); } ``` ### 3. MDI(多文档界面)模板 Qt提供了MDI区域(`QMdiArea`)来支持多文档界面。以下是一个简单的MDI应用程序框架: ```cpp #include <QApplication> #include <QMdiArea> #include <QMdiSubWindow> #include <QTextEdit> #include <QMenuBar> #include <QMainWindow> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; QMdiArea *mdiArea = new QMdiArea(&mainWindow); mainWindow.setCentralWidget(mdiArea); // 创建菜单 QMenu *fileMenu = mainWindow.menuBar()->addMenu("文件"); QAction *newAct = new QAction("新建", &mainWindow); fileMenu->addAction(newAct); QObject::connect(newAct, &QAction::triggered, [&]() { QTextEdit *textEdit = new QTextEdit; textEdit->setPlainText("这是一个新的文档"); QMdiSubWindow *subWindow = mdiArea->addSubWindow(textEdit); subWindow->setWindowTitle("文档"); subWindow->show(); }); mainWindow.show(); return app.exec(); } ``` ### 4. OpenGL模板示例 引用[3]提到了OpenGL,这里提供一个简单的OpenGL窗口,使用Qt的`QOpenGLWidget`: ```cpp #include <QApplication> #include <QOpenGLWidget> #include <QOpenGLFunctions> class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions { public: GLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {} protected: void initializeGL() override { initializeOpenGLFunctions(); glClearColor(0.2f, 0.3f, 0.3f, 1.0f); } void resizeGL(int w, int h) override { glViewport(0, 0, w, h); } void paintGL() override { glClear(GL_COLOR_BUFFER_BIT); // 绘制一个三角形 glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(-0.5f, -0.5f); glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.5f, -0.5f); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(0.0f, 0.5f); glEnd(); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); GLWidget widget; widget.resize(400, 300); widget.setWindowTitle("OpenGL Triangle"); widget.show(); return app.exec(); } ``` 这些示例涵盖了Qt中不同方面的模板使用。用户可以根据自己的需求选择并扩展。 §§相关问题§§ 1. 如何将Qt Designer设计的界面集成到C++代码中? 2. Qt中除了MDI,还有哪些界面框架? 3. 如何在Qt中使用OpenGL进行3D渲染? 4. 如何优化Qt模板代码的性能?</think>以下是几个Qt模板的练习代码示例,涵盖常见应用场景: ### 1. 基础窗口模板(QMainWindow) ```cpp #include <QApplication> #include <QMainWindow> #include <QPushButton> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow window; window.setWindowTitle("基础窗口模板"); window.resize(400, 300); // 添加中心控件 QLabel *label = new QLabel("欢迎使用Qt!", &window); label->setAlignment(Qt::AlignCenter); window.setCentralWidget(label); // 添加按钮 QPushButton *button = new QPushButton("点击我", &window); button->setGeometry(150, 200, 100, 40); QObject::connect(button, &QPushButton::clicked, [](){ qDebug() << "按钮被点击!"; }); window.show(); return app.exec(); } ``` ### 2. 自定义控件模板(QWidget) ```cpp #include <QWidget> #include <QPainter> class CircleWidget : public QWidget { public: explicit CircleWidget(QWidget *parent = nullptr) : QWidget(parent) {} protected: void paintEvent(QPaintEvent *) override { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(Qt::blue); painter.drawEllipse(rect().adjusted(10, 10, -10, -10)); } }; // 使用示例 int main(int argc, char *argv[]) { QApplication app(argc, argv); CircleWidget widget; widget.resize(200, 200); widget.setWindowTitle("自定义圆形控件"); widget.show(); return app.exec(); } ``` ### 3. 多文档界面模板(QMdiArea) ```cpp #include <QMdiArea> #include <QMdiSubWindow> #include <QTextEdit> #include <QMenuBar> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; // 创建MDI区域 QMdiArea *mdiArea = new QMdiArea(&mainWindow); mainWindow.setCentralWidget(mdiArea); // 添加菜单 QMenu *fileMenu = mainWindow.menuBar()->addMenu("文件"); QAction *newAct = new QAction("新建文档", &mainWindow); fileMenu->addAction(newAct); // 新建文档功能 QObject::connect(newAct, &QAction::triggered, [mdiArea]() { QTextEdit *textEdit = new QTextEdit; QMdiSubWindow *subWindow = mdiArea->addSubWindow(textEdit); subWindow->setWindowTitle("文档 " + QString::number(mdiArea->subWindowList().count())); subWindow->show(); }); mainWindow.resize(800, 600); mainWindow.show(); return app.exec(); } ``` ### 4. 网络请求模板(QNetworkAccessManager) ```cpp #include <QNetworkAccessManager> #include <QNetworkReply> #include <QEventLoop> QByteArray httpGet(const QString &url) { QNetworkAccessManager manager; QEventLoop loop; // 用于同步等待 QNetworkRequest request((QUrl(url))); QNetworkReply *reply = manager.get(request); // 异步转同步 QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); if (reply->error() != QNetworkReply::NoError) { qWarning() << "HTTP错误:" << reply->errorString(); return QByteArray(); } return reply->readAll(); } // 使用示例 int main() { QByteArray data = httpGet("https://api.example.com/data"); qDebug() << "收到数据长度:" << data.length(); } ``` ### 5. OpenGL 渲染模板(QOpenGLWidget) ```cpp #include <QOpenGLWidget> #include <QOpenGLFunctions> class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions { public: GLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {} protected: void initializeGL() override { initializeOpenGLFunctions(); glClearColor(0.2f, 0.3f, 0.3f, 1.0f); } void resizeGL(int w, int h) override { glViewport(0, 0, w, h); } void paintGL() override { glClear(GL_COLOR_BUFFER_BIT); // 添加OpenGL绘制代码 glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(-0.5f, -0.5f); glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.5f, -0.5f); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(0.0f, 0.5f); glEnd(); } }; // 使用示例 int main(int argc, char *argv[]) { QApplication app(argc, argv); GLWidget widget; widget.resize(400, 400); widget.setWindowTitle("OpenGL 三角形"); widget.show(); return app.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值