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)

参数说明:

参数一:int n ---- 要转换的数据

参数二:int base = 10 ---- 设置数据的进制,默认为十进制,

2 8 16

返回值:QString

比如:

ui->testLabel->setText(QString::number(20,16));

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

  • toInt(bool *, int ) const : int
int QString::toInt(bool *ok = nullptr, int base = 10) const

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

参数说明:

参数一:bool *ok ----- > 输出参数 转换成功,返回true,否则,返回false

参数二:int base = 10 ---- 设置数据的进制,默认为十进制

返回值:得到基本类型数据

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 ------ 普通成员函数,要使用对象来调用

功能:当程序运行时,可以实现对一个参数的设置

参数说明:

参数一:int a -----> 要传入的参数的值

返回 值: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 常用 使用 接口:

QT QString 常用 使用 接口_qstring 大写-CSDN博客

二 QMessageBox---- 消息盒子

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

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

效果图:

案例:

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)
参数说明:
参数一:QWidget *parent  -- 消息盒子显示在父控件(显示在某个界面上),一般传入this
 比如:MainWindow --->QMainWindow --->QWidget
参数二:const QString &title --- 消息盒子的标题
参数三:const QString &text ----消息盒子的文本
参数四:QMessageBox::StandardButtons buttons ---消息盒子的显示按钮,默认为一个Ok按钮
参数五:QMessageBox::StandardButton ---如果有多个按钮,则告诉默认选择哪一个按钮

返回值: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 多界面编程思路

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

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

第一步:右击项目 ---- > new(创建文件),在弹出的对话框中,选择如下设置

第二步:选择下一步,在弹出的对话框,选择界面的模板

第三步:选择下一步,设置界面类的名字

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

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

在qt中,因为不同界面,本质上就是不同的类的对象,说到底还是不同类之间的数据传输,

使用信号和槽来实现(Signals and slots are made possible by Qt's meta-object system--qt元对象系统)

1. 信号和槽基本概念

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

信号 ----- > 函数,该函数不需要实现

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

2.信号和槽使用

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

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

对象之间通信的步骤:

第一步:创建对象一

        定义或者使用系统的信号和槽

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);
};

第二步:创建对象二

定义或者使用系统的信号和槽

第三步:建立对象一和对象二之间的信号和槽的连接 ---- connect来连接两个对象之间通信

connect(sender, &QObject::destroyed, this, &MyObject::objectDestroyed);
  参数说明
    参数一:信号的发送者 --- 对象一  指针类型
    参数二:对象一要发送的信号  写法:&对象一类名::信号名字 指针类型
    参数三:信号的接收者 --- 对象二 指针类型
    参数四:对象二回应信号的槽函数  写法: &对象二类名::槽函数名字 指针类型

注意事项:

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); //在发送信号时,指定要传输数据

第五步:在槽函数中,来接收数据并处理数据

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

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值