一步步学Qt,第一天

【五天时间】Qt从入门到实战:第一天 Qt是一个跨平台的C++图形用户界面应用程序框架。她为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。 阅读详情

今天是Qt的第一天,越到了很多的问题,不过还好都已经解决了。下面记录一下:


qt incomplete type


这个问题,我刚遇到的时候,以后是自己疏忽没有写好code,后来去参考demo程序,发现自己没有错误。不错那个提示却一再的出现。于是,google,百度都试了。

后来看到了一个说明,现在我也不知道是那个了。大概如下:

#include <QDialog>

#include <QTextEdit>

 在头文件中引用了其他的class的话,若写成:

class QDialog;

class QTextEdit;

那么就会出现路上的错误提示。

现在还没知道为什么?


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

之后就是使用designer设计了多个ui文件,怎么把他们连在一起的问题。为了从一个ui中取数据到另一个ui文件按中,我纠结了半天,不过现在解决了。

qt自动生成的Dialog是把ui对应的class的对象作为主窗口或主Dialog的一个成员。那个在对ui的设计应用到这个窗体上时就使用了这个对象的setupUi方法。

那么在另一个地方需要绘制新的窗体是,就使用新的ui对应的class的对象来调用setupUi方法。

如果你在自定义class时是继承自这个ui的class那个就可以直接重新实现setupUi方法。

看code

#ifndef STANDARDDIALOG_H
#define STANDARDDIALOG_H

#include <QDialog>
#include <ui_showAllDialog.h>
#include <QTextEdit>
class QDialog;
class QTextEdit;
#include "showinfo.h"
namespace Ui {
    class StandardDialog;
}

class StandardDialog : public QDialog
{
    Q_OBJECT

public:
    explicit StandardDialog(QWidget *parent = 0);
    ~StandardDialog();

private:
    Ui::StandardDialog *ui1;
    Ui::showAllDialog *ui2;
    QDialog *all;
    showInfo *showallinfo;
private slots:
    void setSex();
    void setName();
    void setAge();
    void setStature();
    void showAll();
};

#endif // STANDARDDIALOG_H


#include <QInputDialog>
#include <QMessageBox>
#include "standarddialog.h"
#include "ui_standarddialog.h"

StandardDialog::StandardDialog(QWidget *parent) :
    QDialog(parent),
    ui1(new Ui::StandardDialog)
{
    ui1->setupUi(this);

    connect(ui1->quitapp,SIGNAL(clicked()),this,SLOT(close()));
    connect(ui1->sexSetButton,SIGNAL(clicked()),this,SLOT(setSex()));
    connect(ui1->nameSetButton,SIGNAL(clicked()),this,SLOT(setName()));
    connect(ui1->ageSetButton,SIGNAL(clicked()),this,SLOT(setAge()));
    connect(ui1->statureSetButton,SIGNAL(clicked()),this,SLOT(setStature()));
    connect(ui1->showAllButton,SIGNAL(clicked()),this,SLOT(showAll()));
}

StandardDialog::~StandardDialog()
{
    delete ui1;
}

void StandardDialog::setSex()
{
    QStringList list;
    list<<tr("male")<<tr("famale");
    bool ok;
    QString sex = QInputDialog::getItem(this,tr("Sex"),tr("please choose sex:"),list,0,false,&ok);
    if(ok){
        ui1->sexlineEdit->setText(sex);
    }
}

void StandardDialog::setName()
{
    bool ok;
    QString name = QInputDialog::getText(
                this,tr("UserName"),tr("please enter name:")
                ,QLineEdit::Normal,ui1->namelineEdit->text(),&ok);
    if(ok && !name.isEmpty()){
        ui1->namelineEdit->setText(name);
    }
}

void StandardDialog::setAge()
{
    bool ok;
    int age = QInputDialog::getInteger(this,tr("User age"),tr("please enter age:"),ui1->agelineEdit->text().toInt(),0,150,1,&ok);
    if(ok){
        ui1->agelineEdit->setText(QString(tr("%1")).arg(age));
    }
}

void StandardDialog::setStature()
{
bool ok;
double d = QInputDialog::getDouble(this,tr("stature"),tr("please enter your stature:"),170.00,0,200.00,1,&ok);
if(ok){
    ui1->staturelineEdit->setText(QString(tr("%1")).arg(d));
}
}

void StandardDialog::showAll()
{
    showallinfo = new showInfo;
    QString str = tr("Name:")+ui1->namelineEdit->text()+tr("\n")+
            tr("Sex:")+ui1->sexlineEdit->text()+tr("\n")+
            tr("Age:")+ui1->agelineEdit->text()+tr("\n")+
            tr("Stature:")+ui1->staturelineEdit->text()+tr("\n");
    //QString str = tr("Name:")+ui1->namelineEdit->text();
    showallinfo->setInfo(str);

    showallinfo->viewTextInfo();
    showallinfo->show();
}




#ifndef SHOWINFO_H
#define SHOWINFO_H

#include <QDialog>
#include <QString>
#include "ui_showAllDialog.h"

class showInfo : public QDialog,Ui::showAllDialog
{
    Q_OBJECT
public:
    explicit showInfo(QWidget *parent = 0);
    QString getInfo();
    void setInfo(const QString &str);
    void viewTextInfo();
private:
    QString info;
signals:

public slots:

};

#endif // SHOWINFO_H
对于在ui之间传值的问题。我使用的是继承那个ui的class,在重新实现setupUi方法,同时初始化connect关系,即就是在构造函数中完成。那么对于从一个ui中取数据,我使用了自定义的成员函数来进行,看代码:
#include "showinfo.h"

showInfo::showInfo(QWidget *parent) :
    QDialog(parent)
{
    setupUi(this);
    connect(this->quitButton,SIGNAL(clicked()),this,SLOT(hide()));
}

void showInfo::setInfo(const QString &str)
{
    this->info = str;
}

QString showInfo::getInfo()
{
    return this->info;
}

void showInfo::viewTextInfo()
{
    textBrowser->setText(this->getInfo());
}


调用部分:


void StandardDialog::showAll()
{
    showallinfo = new showInfo;
    QString str = tr("Name:")+ui1->namelineEdit->text()+tr("\n")+
            tr("Sex:")+ui1->sexlineEdit->text()+tr("\n")+
            tr("Age:")+ui1->agelineEdit->text()+tr("\n")+
            tr("Stature:")+ui1->staturelineEdit->text()+tr("\n");
    //QString str = tr("Name:")+ui1->namelineEdit->text();
    showallinfo->setInfo(str);

    showallinfo->viewTextInfo();
    showallinfo->show();
}



一步步学Qt,第三天-Qt动态调用机制 一步步学Qt,第三天-Qt动态调用机制 今天写了一个程序,却发现了一个很有意思的东西,不知道是我理解不对,还是Qt确实如此 我要说的是Qt的动态调用机制,我们知道,在C++中,继承关系衍生的对象,他们可以来自fatherclass或者son class,在程序 阅读详情

相关推荐

一步步学Qt,第五天-Qt学习小结-Qt工作机制

一步步学Qt,第五天-Qt学习小结-Qt工作机制 学习Qt有些时间了,每天留下的是当天自己的学习心得,和问题处理。现在来小小的总结一下,这些天学习Qt,对Qt的个人认识。 Qt的工作机制:(这里借用一个QtGuiApplication来讲解分析) 1、使用QtSDK

Qicz的学习笔记 博客新址:izcqi.com 1490

Qt 不允许指针指向不完整的类类型 “QScrollBar“

要解决这个问题,你需要确保在使用QScrollBar类型的指针之前,已经包含了相应的头文件,并且已经定义了该类型。也就是说,你需要将前向声明改为包含相应的头文件。在C++中,如果尝试使用一个不完整类型的指针,编译器会报错。

读书札记2022的博客 1297

一步步学Qt,第八天-使用QPrinter打印多页文档

一步步学Qt,第八天-使用QPrinter打印多页文档 使用文档打印,在很多的地方都有应用,办公室里可能需要用此来将编辑好的文档打印出来。当然遇到多页文档的打印时,就程序设计来说,就设计到分页的问题,怎么样的分页才是合理的呢。Qt中使用QTextDocument的的方式可以自动

Qicz的学习笔记 博客新址:izcqi.com 3571

Qt5 不允许指针指向不完整的类类型,最新解决方法

报错原因:QTableWidget这个类的指针指向了另一个类对象,而另一个类对象没有声明导致的。

weixin_39301285的博客 601

一步步学Qt,第四天-Qt 建立MainWindow的小小bug处理

一步步学Qt,第四天-Qt 建立MainWindow的小小bug处理 刚写好的小小的记事本,差不多可以使用了,不过在测试中发现了很多的bug,这才一个个的修改了,修改后的实现文件code是: #include "mainwindow.h" #include "ui_mai

Qicz的学习笔记 博客新址:izcqi.com 1300

【零基础学QT】文章导航篇

学习路线:先从简单的QT基本框架学起,再到QT进阶的模块使用,再到现在QT主推的QML学习,每章节的学习都配合一个小例子和小实验来巩固本章内容,在学习完一些章节后我会完成一个实战项目揉合近期所讲到的文章内容,文章中所编写的代码都会通过百度云盘更新免费提供下载;

凉开水白菜的博客 1407

QT 创建文件 Ui 不允许使用不完整类型,可以尝试添加一下任何头文件

QMessageBox::information(this,"title","子窗口调试已启动");//QT 创建文件 Ui 不允许使用不完整类型,尝试添加一下任何头文件,或者添加ui_xx.h头文件。添加ui_xx.h头文件。

Txwtech 596

Qt:一个强大而灵活的跨平台应用程序开发框架

代码示例中的源代码是简单的示例,用于演示Qt框架的一些基本特性。实际应用中,开发人员可以根据自己的需求和项目要求,使用Qt框架提供的丰富功能和组件进行开发。在Qt的官方文档和示例代码中,您可以找到更多详细的教程和示例,以帮助您更好地理解和使用Qt框架。它提供了丰富的工具和功能,支持跨多个平台进行开发,并具有高度的可定制性和灵活性。它提供了丰富的工具和功能,使得开发人员能够创建高性能、可扩展和易于维护的应用程序。下面将详细介绍Qt框架的优点,并提供一些相关的源代码示例。

CodeVorter的博客 852

QT5编译错误修改

一、手动添加Q_OBJECT后报错处理 半路添加Q_OBJECT后,必须重新运行qmake!! 当然,你也可以随便修改一下 .pro 文件,哪怕是添加或删除一个空格或空行什么的都可以。使得qmake可以自动运行,目前采用这种方法可行 如果编译过不去的话,把头文件从项目移出去,然后重新加进来,Qt会产生一个moc文件 网上下面方法没有测试,有时间测试一下 编译后老是报undefined refe...

jeff_linux的博客 723

QT经典教程_详细一步一步例子

为了使更多的Qt初学者能尽快入门Qt,也为了Qt及Qt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)

ADI官方例程HDL和No-OS生成Vivado工程

这一步是选择下载源,一般都是选择国内镜像,因为国外的源太慢了,这里选择阿里的镜像,如果没有这个选项可以在下面的User URL里添加就行,选择好源后然后点击下一步。下一步会从你选择的源上下载软件包目录,如果提示Unable to get setup from https://xxxxxx/,返回上一步,选择别的源,例如第二个163网易的源。然后就是你想要安装在哪了,下面的选项好像会决定环境变量存放在哪,不过一般都是个人电脑选择第一个默认的就行,然后点下一步。下好之后双击打开,就是这个界面了,直接点下一步。

代码匠的博客 3832

QT跨平台应用程序开发框架(9)—— 容器类控件

QGridLayout 用来实现网格布局的效果,可以达到 M * N 的这种网格效果,主要属性和 QHBoxLayout 类似,但是设置 spacing 的时候是按照垂直水平两个方向来设置的。每个 Widget 只能设置一个布局管理器, 但是可以通过拖拽方式创建两个布局遍历器,但是这样创建的布局管理器仅仅只会将内部控件重新组合位置,并不会像上面一样随着窗口大小改变。而容器内控件包含的直接就是我们前面介绍的一堆的控件。解答:我们前面使用ui创建界面时,都是手动拖拽方式来布局的,其实这种方式不科学。

aaqq800520的博客 1155

安卓逆向实战:利用Frida-RPC自动化获取大麦演唱会数据

本文详细介绍了如何利用Frida-RPC技术实现安卓逆向自动化,以获取大麦演唱会数据。通过实战演示,从环境搭建、使用Frida动态分析定位核心签名算法,到封装为可复用的Python脚本,完整解析了自动化数据获取的技术路径与工程化思考。

cheese的博客 976

新手学QT之书籍总结篇

作为一个外行人进入IT行业已经一年有余,回头

ZHIWEI的IT修炼之路 8446

AI处理器组合

编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。- 如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。输出为组合列表,当array=[0, 1, 4, 5, 6, 7] ,num=1时,输出为[[0], [1]]- 如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。任务申请1个处理器。

面试高手的博客 1万+

YOLOv8【第七章:损失函数篇·第1节】一文搞定,IoU系列损失函数!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1199

QT-入门第一天总结

本文将分为6个部分总结 其实是从第一天的6个案例总结 01—------ 建议学习QT前有一定的面向对象编程基础,无论是C++或者JAVA,因为QT是用C++编程,如果没有一定基础理解起来会比较困难。 上面是新建的一个工程文件,其中mywidget是默认是窗口基类,会自动创建好。如果你在项目创建中选择QWidget 先看Main函数, 这是Main函数的一个模板,在运行...

qq_41030253的博客 288

从原理到实战:深入解析 Synopsys VCS 仿真快照技术,提升验证效率

VCS Checkpoint 技术摘要 VCS Checkpoint 是 Synopsys VCS 提供的仿真状态快照功能,可将完整的仿真状态(寄存器、存储器、时钟、随机种子等)序列化保存。主要应用场景包括:跳过耗时初始化阶段、覆盖率驱动验证、Debug复现和UVM分阶段验证。核心原理是对仿真内核状态的完整序列化,需注意文件句柄等特殊对象需手动处理。 使用方式: 编译时添加 -checkpoint 选项 运行时通过 $save 系统任务或 +checkpoint 参数保存状态 通过 +restore 参数恢

元直的博客 248

一步步学Qt,第五天-Qt这样的小小差异你发现了多少

一步步学Qt,第5天-Qt这样的小小差异你发现了多少 今天下了一个小小得程序,一个小小的文件目录浏览器。在看到这个地方的时候,看到了Qt你们的Model/View模式,原本小弟疑问这个玩意没有什么模式,自己借用其他的设计模式应该可以的。没想到Qt自己有自己的一套模式。不

Qicz的学习笔记 博客新址:izcqi.com 2900

14、脑肿瘤复发预测与转移瘤跟踪的自动化方法

本文介绍两种脑肿瘤相关自动化方法:一种用于预测胶质瘤切除术后的肿瘤复发位置,结合图像配准、静态模型和动态模拟模型,利用患者的DTI数据进行预测;另一种用于在纵向扫描中跟踪转移性脑肿瘤,通过联合求解配准参数估计和图像变化标记问题,提高肿瘤跟踪的准确性和效率。文章同时分析了两种方法的优势与挑战,并提出了未来研究方向,旨在为脑肿瘤的诊断和治疗提供更可靠的工具。

defi6farmer的博客 119

华为OD新系统真题-最小极差分组(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【最小极差分组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小极差分组】多语言题解。

qq_45776114的博客 588

QT6学习第一天

QT6学习第一天

qq_15409121的博客 1409

【反封禁策略】集成 Undetected-Chromedriver:让 Browser-Use 绕过 Cloudflare 五秒盾

摘要:AI Agent如何突破Cloudflare检测的实战指南 本文针对AI Agent在Cloudflare检测下频繁受阻的问题,深入分析了undetected-chromedriver的工作原理与局限性。文章指出,Cloudflare 2026年的检测体系已升级为"浏览器指纹+IP信誉+协议指纹+行为模式"的多维交叉验证,单一伪装方案难以奏效。 核心内容包括: undetected-chromedriver的三层补丁体系解析 v2与v3版本的适用场景对比 两种Browser-Use集成方案:Selen

ZDQ58818的博客 284

QT跨平台应用程序开发框架(1)—— 环境搭建

其实说是安装三个东西,其实只要安装一个Qt SDK,其它两个都有了。之后一路点击下一步即可,就是安装路径不要带中文,不要带特殊符号和空格。创建好项目后会预先生成一些代码,我们来讲解一下这些代码做了什么。Windows下还有哪些方案可以开发GUI?之后一路确认然后安装即可。

aaqq800520的博客 3885

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 在VS2008中使用Qt编程
下一篇: 一步步学Qt,第二天
Qicz
博客等级 码龄16年 56粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值