02 qt基本控件及信号和槽

这篇具有很好参考价值的文章主要介绍了02 qt基本控件及信号和槽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 QString类

功能:显示一个字符串内容
主要接口函数
构造函数:

   QString(const char *str)
   QString(const QString &other)

赋值运算符重载:

QString &operator=(const QString &other)

功能函数:

1)基本数据类型(int,float,double,char*)转换成字符串

  • number(long , int ) : QString
  • number(int , int ) : QString
  • number(uint , int ) : QString
  • number(ulong , int ) : QString
  • number(qlonglong , int ) : QString
  • number(qulonglong , int ) : QString
  • number(double , char , int ) : QString
    该函数都是一个静态成员并且重载函数
[static] QString QString::number(int n, int base = 10)

参数说明:

  1. 参数一:int n ---- 要转换的数据
  2. 参数二:int base = 10 ---- 设置数据的进制,默认为十进制,
    2 8 16
  3. 返回值:QString
    比如:
ui->testLabel->setText(QString::number(20,16));

2)将字符串转换成基本数据类型

toDouble(bool *) const : double
toFloat(bool *) const : float
toInt(bool *, int ) const : int
int QString::toInt(bool *ok = nullptr, int base = 10) const

该函数为普通的成员函数,将字符串转换成基本数据类型
参数说明:

  1. 参数一:bool *ok ----- > 输出参数 转换成功,返回true,否则,返回false
  2. 参数二:int base = 10 ---- 设置数据的进制,默认为十进制
  3. 返回值:得到基本类型数据

3)QString和 C++中 string之间转换

将string -----> QString
[static] QString QString::fromStdString(const std::string &str) – 静态成员函数,可以直接使用类名调用
比如:

string str = teacher->getName();
QString name = QString::fromStdString(str);

将 QString -----> string
std::string QString::toStdString() const ----- 普通的成员函数,要使用对象来调用

4)arg函数 ----- 用来实现字符串的连接
QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const ------ 普通成员函数,要使用对象来调用
功能:当程序运行时,可以实现对一个参数的设置
参数说明:

  1. 参数一:int a -----> 要传入的参数的值
  2. 返回 值:QString
    比如:
//为了实现动态的参数传入,那么使用%来实现提前占位符,比如 %1 %2 ..
    //一个%占位符对应一个arg
    //QString progress = QString("当前下载进度为:%1 ").arg(50);
    QString ss("当前下载进度为:%1");
   QString progress= ss.arg(50);
    ui->downloadLabel->setText(progress);//progress---> 当前下载进度为:50

QT QString 常用 使用 接口

二 QMessageBox---- 消息盒子

当程序在运行过程中,希望给用户一些提示的作用,消息盒子它可以实现

QMessageBox msgBox;
  msgBox.setText("The document has been modified.");
  msgBox.exec();

效果图:

02 qt基本控件及信号和槽,QT,qt,开发语言

案例:

void TeacherQmainWindow::on_messageBoxButton_clicked()
{
    QMessageBox msgBox; //创建一个消息盒子
    msgBox.setWindowTitle("输入提示");
            msgBox.setText("用户名或密码出错,请重新输入."); //给消息盒子设置一个消息内容
      msgBox.exec(); //执行并显示一个消息盒子
}

消息盒子使用方式二
函数原型:

QMessageBox::StandardButton 
information(QWidget *parent, const QString &title,
 const QString &text, QMessageBox::StandardButtons buttons = Ok, 
QMessageBox::StandardButton defaultButton = NoButton)

参数说明:

  1. 参数一:QWidget *parent – 消息盒子显示在父控件(显示在某个界面上),一般传入this
    比如:MainWindow —>QMainWindow —>QWidget
  2. 参数二:const QString &title — 消息盒子的标题
  3. 参数三:const QString &text ----消息盒子的文本
  4. 参数四:QMessageBox::StandardButtons buttons —消息盒子的显示按钮,默认为一个Ok按钮
  5. 参数五:QMessageBox::StandardButton —如果有多个按钮,则告诉默认选择哪一个按钮
  6. 返回值:QMessageBox::StandardButton

示例代码如下:

 //tr()---国际化,通常可以去掉
            int ret = QMessageBox::warning(this, "操作提示",
                                           "The document has been modified.\n"
                                              "Do you want to save your changes?",
                                           QMessageBox::Save | QMessageBox::Discard
                                           | QMessageBox::Cancel,
                                           QMessageBox::Save);

    switch (ret) {
        case QMessageBox::Save:
            qDebug()<< "Save was clicked";
            break;
        case QMessageBox::Discard:
            qDebug()<<" Don't Save was clicked";
            break;
        case QMessageBox::Cancel:
            qDebug()<<" Cancel was clicked";
            break;
        default:
            qDebug()<< "should never be reached";
            break;
      }

三 多界面编程

多界面编程:实现界面的跳转

界面跳转又分为无数据传输跳转和有数据传输跳转
如果要有数据传输,那么多界面跳转的实现原理:信号和槽

信号和槽的使用形式一:
在ui文件中,右击控件 -----> 选择 转槽 ----- 通常应用在界面上给指定的控件设置动态交互

3.1 多界面编程思路

  1. 第一步:创建另一个界面的对象
  2. 第二步:显示要跳转的界面
  3. 第三步:关闭或者隐藏当前的界面
   //如果账号和密码正确,进行到管理员界面 ---- 启动管理员界面(多界面编程)
       //第一步:创建另一个界面的对象
       AdminWindow* admin = new AdminWindow; //不能创建在栈上
        //第二步:显示要跳转的界面
       admin->show();
        //第三步:关闭或者隐藏当前的界面
       this->close();

在Qt中,创建一个界面类的方式和设置

  1. 第一步:右击项目 ---- > new(创建文件),在弹出的对话框中,选择如下设置
    02 qt基本控件及信号和槽,QT,qt,开发语言

  2. 第二步:选择下一步,在弹出的对话框,选择界面的模板
    02 qt基本控件及信号和槽,QT,qt,开发语言

  3. 第三步:选择下一步,设置界面类的名字
    02 qt基本控件及信号和槽,QT,qt,开发语言

  4. 第四步:点击下一步,完成 即可。

3.2 界面跳转携带数据 ---- 信号和槽(signal and slot)

在qt中,因为不同界面,本质上就是不同的类的对象,说到底还是不同类之间的数据传输,
使用信号和槽来实现(Signals and slots are made possible by Qt's meta-object system--qt元对象系统)

信号和槽基本概念
信号和槽就是用于对象之间的数据通信,该机制是QT特有的,跟其他的框架不同,信号和槽相当其他的通信机制,要更加安全(提前可以把错误发生在编译期,另外,当程序运行时,出错时,不会让程序容易死掉)。

  • 信号 ----- > 函数,该函数不需要实现
  • 槽 ------> 函数,该函数需要实现,常用在槽函数中,实现自己的功能

2.信号和槽使用
02 qt基本控件及信号和槽,QT,qt,开发语言

只有当信号和槽建立的连接的关系,发信号被发送时,该槽函数才会被调用。

在qt中,有很多的预定义信号和槽,除此之外,自己可以根据需求来自定义信号和槽,然而,当一个信号发生时,那么跟它建立的槽就 会被调用,来做为做信号的回应。使用connect函数来建立信号和槽连接。

对象之间通信的步骤:

  1. 第一步:创建对象一
    定义或者使用系统的信号和槽
class Test:public qt类 // 【1】qt类要直接或者间接继承于QObject
{
	//如果是自定义的类,想要支持信号和槽的操作,必须要加上宏
	Q_OBJECT //【2】声明这个宏,来说明要使用信号和槽
	//定义信号  ---- 关键字  signals
	signals:
	void test(); //信号不带数据
	void test1(int data); //信号带数据
	private slots:// public slots protected slots
	void testfunc(); //槽函数参数类型要跟信号的类型要保持一致,这样才能保证类型安全
                     //槽函数的  参数个数,不能超过信号参数个数
    void test1func(int data);
};
  1. 第二步:创建对象二
    定义或者使用系统的信号和槽
  2. 第三步:建立对象一和对象二之间的信号和槽的连接 ---- connect来连接两个对象之间通信
 connect(sender, &QObject::destroyed, this, &MyObject::objectDestroyed);

参数说明

  1. 参数一:信号的发送者 — 对象一 指针类型
  2. 参数二:对象一要发送的信号 写法:&对象一类名::信号名字 指针类型
  3. 参数三:信号的接收者 — 对象二 指针类型
  4. 参数四:对象二回应信号的槽函数 写法: &对象二类名::槽函数名字 指针类型

注意事项:
1)对象一和对象二可以是同一个对象,自已发送信号,自己接收并回应
2)connect函数作用是说明两个对象建立一个信号和槽的关系,并不会执行这个函数体
可以设置在构造函数,或者自己认为要放的地方
比如:

connect(this,&LoginWin::sendUserName,sw,&SystemMainWindow::getUserData);

connect函数原型:

[static] QMetaObject::Connection QObject::connect(const QObject *sender,
 const char *signal, const QObject *receiver, 
const char *method, Qt::ConnectionType type = Qt::AutoConnection)

Qt::ConnectionType type = Qt::AutoConnection --- 使用connect函数之后 ,那么信号和槽就已建立连接

第四步:发送信号 — emit

emit test1(1); //在发送信号时,指定要传输数据

第五步:在槽函数中,来接收数据并处理数据文章来源地址https://www.toymoban.com/news/detail-656240.html

void LoginWin::test1func(int data)
{
     ui->testLabel->setText(QString::number(data));
}

到了这里,关于02 qt基本控件及信号和槽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 07.QT信号和槽-2

    07.QT信号和槽-2

            在Qt中,允许⾃定义信号的发送⽅以及接收⽅,即可以⾃定义信号函数和槽函数。但是对于⾃定义的信号函数和槽函数有⼀定的书写规范。 1.1 自定义信号 (1)⾃定义信号函数必须写到\\\"signals\\\"下; (2)返回值为void,只需要声明,不需要实现; (3)可以有参数,

    2024年04月14日
    浏览(9)
  • 【Qt】信号和槽机制

    【Qt】信号和槽机制

    目录 一、认识信号和槽 二、connect函数 三、自定义槽函数 四、自定义信号 五、带参数的信号和槽 六、信号和槽断开连接 七、信号和槽存在的意义 八、Lambda表达式定义槽函数 概述 在Qt中,用户和控件的每次交互过程称为一个事件。如\\\"用户点击按钮\\\"是一个事件,\\\"用户关闭窗

    2024年02月22日
    浏览(12)
  • Qt 信号和槽机制

    Qt 信号和槽机制

    一. 简介         在Qt中使用信号和槽机制来完成对象之间的协同操作。简单来说,信号和槽都是函数,比如按下窗口上的一个按钮后想要弹出一个对话框,那么就可以将这个按钮的单击信号和我们定义的槽关联起来,在这个槽中可以创建一个对话框,并且显示它。这样,

    2024年01月18日
    浏览(11)
  • Qt6.2教程——3.Qt信号和槽

    信号和槽是Qt中一个强大的特性,用于处理对象之间的通信。它们是一种事件处理机制,允许一个对象在某个事件发生时通知另一个对象。 定义 : 信号是一个QObject的成员函数,当某个特定事件发生时,它被自动调用。它可以与一个或多个槽关联。 声明 : 在Qt类的声明中,信号

    2024年02月10日
    浏览(11)
  • [Qt的学习日常]--信号和槽

    [Qt的学习日常]--信号和槽

    前言 作者 :小蜗牛向前冲 名言 :我可以接受失败,但我不能接受放弃   如果觉的博主的文章还不错的话,还请 点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习:什么是信号和槽,自定义槽函数和信号函数,信号和槽的传参,断开,

    2024年04月28日
    浏览(9)
  • 20221210 QT----信号和槽的使用

    20221210 QT----信号和槽的使用

    什么是信号(signal) 以QPushButton为例: (1)按下按钮时,会触发一个mousePressEvent事件,此时会发出一个pressed信号; (2)松开按钮时,会触发一个mouseReleaseEvent事件,此时会发出released和clicked信号。 事件的种类有很多,不同的事件都对应着不同的信号,当事件发生时,对应

    2024年02月15日
    浏览(9)
  • Qt快速学习(一)--对象,信号和槽

    Qt快速学习(一)--对象,信号和槽

    目录 1.Qt概述 1.1 什么是Qt 2.2 手动创建 2.3 pro文件 2.4 一个最简单的Qt应用程序        3 第一个Qt小程序 3.1 按钮的创建 3.2 对象模型(对象树)       3.3 Qt窗口坐标体系 4 信号和槽机制         4.1 系统自带的信号和槽 4.2 自定义信号和槽     4.3信号槽的拓展     

    2024年02月12日
    浏览(8)
  • qt信号和槽避免多次连接

    qt同一个信号和槽多次连接,则槽函数 会触发多次 (默认),可能不是我们想要的结果。 有3种方法可以解决这个问题: 因为初始化函数在在整个程序中只运行一次,所以这里面连接信号和槽,就能避免重复连接问题了。 Qt::UniqueConnection 的作用是:如果该信号以前没连接过

    2024年02月10日
    浏览(19)
  • QT基础之——ui文件以及信号和槽机制

    QT基础之——ui文件以及信号和槽机制

            上一节我们讲了除界面文件ui文件其他的所有文件,这一节我们来介绍一下ui文件:在文件目录中我们能看到界面文件这一栏,点击展开我们可以看到一个以\\\".ui\\\"结尾的文件,双击我们会看到如下界面:         我们在右侧选中label和PushButton拖入到工作台上的窗口中,

    2024年04月08日
    浏览(9)
  • qt解决信号和槽连接时传递额外参数的问题

    QSignalMapper 是 Qt 框架中的一个类,用于解决信号和槽连接时传递额外参数的问题。当一个信号被触发时,QSignalMapper 可以将该信号与一个特定的参数关联起来,并将信号与对应的槽函数进行连接。 下面是关于 QSignalMapper 的一些详细解释: 1.作用: QSignalMapper 类的主要作用是在一

    2024年02月07日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包