QT控件-按钮(六)

前两次编译失败,失败原因知识点补充如下:

1、endl

在C++中,std::endl是一个流操控符,用于在输出流中插入换行符,并刷新输出缓冲区。它通常与std::cout一起使用,但在Qt中,qDebug()也可以使用。

基本用法

1.1、 使用 std::endlstd::cout
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl; // 输出: Hello, World!
    return 0;
}

在这个例子中,std::endl会在输出后插入一个换行符,并刷新输出缓冲区。

1.2、 在 Qt 中使用 qDebug()

在Qt中,虽然qDebug()本身会自动在输出末尾添加换行符,但如果你想要在qDebug()的输出中使用std::endl,你可以这样做:

QT6.7验证失败,如下报编译错误,std下已无endl;

#include <QDebug>

int main() {
    qDebug() << "Hello, Qt!" << std::endl; // 输出: Hello, Qt!
    return 0;
}

注意事项

  1. 性能:每次使用std::endl都会刷新输出缓冲区,这可能会影响性能。如果不需要立即刷新缓冲区,可以使用换行符\n代替,例如:

    std::cout << "Hello, World!" << "\n"; // 不会刷新缓冲区
    
  2. 在Qt中使用:对于qDebug(),通常不需要使用std::endl,因为它已经自动处理换行。
    编译异常原因一,此处加了endl

2、qDebug

在Qt中,qDebug是一个用于打印调试信息的函数,它提供了一种方便的方式来输出文本、变量值和其他信息到控制台或调试器。qDebug是Qt的日志系统的一部分,通常用于开发和调试阶段。

基本用法

qDebug的基本用法非常简单,可以直接调用并传入你想要输出的内容。它支持多种数据类型,包括字符串、整数、浮点数、对象等。

2.1、 输出基本信息
#include <QDebug>

int main() {
    qDebug() << "Hello, Qt!"; // 输出: Hello, Qt!
    return 0;
}
2.2、 输出变量
#include <QDebug>

int main() {
    int value = 42;
    QString name = "Qt";

    qDebug() << "Value:" << value; // 输出: Value: 42
    qDebug() << "Name:" << name;    // 输出: Name: "Qt"

    return 0;
}
2.3、 输出多个变量

你可以在一个qDebug调用中输出多个变量,使用<<运算符连接它们。

#include <QDebug>

int main() {
    int x = 10;
    int y = 20;

    qDebug() << "Coordinates:" << x << y; // 输出: Coordinates: 10 20

    return 0;
}
2.4、 输出格式化字符串

你可以使用QStringarg方法来格式化输出。

#include <QDebug>
#include <QString>

int main() {
    int count = 5;
    QString message = QString("There are %1 items.").arg(count);

    qDebug() << message; // 输出: There are 5 items.

    return 0;
}

使用qDebug的注意事项

  1. 调试信息的级别qDebug是用于调试的输出,通常在生产环境中不建议使用。Qt还提供了其他日志函数,如qWarning, qCritical, qFatal等,用于不同级别的日志输出。

  2. 性能:在性能敏感的代码中,频繁使用qDebug可能会影响性能。可以使用条件编译来控制调试输出。

  3. 输出到文件:可以通过重定向Qt的消息输出,将日志信息输出到文件中。

输出到文件示例

如果需要将qDebug的输出重定向到文件,可以使用QFileQTextStream

#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QTextStream>

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    QFile file("debug.log");
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        QTextStream out(&file);
        qInstallMessageHandler([&out](QtMsgType type, const QMessageLogContext &context, const QString &msg) {
            out << msg << "\n";
            out.flush();
        });
    }

    qDebug() << "This will be logged to the file.";

    return a.exec();
}

QDialogButtonBox

//mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QDialogButtonBox>

#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    QDialogButtonBox *dialogButtonBox;

    QPushButton *pushButton;

private slots:
    /*声明信号槽,带QAbstractButton *参数,用于判断点击了哪个按钮*/
    void dialogButtonBoxClicked(QAbstractButton *);


};
#endif // MAINWINDOW_H

//mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this -> setGeometry(0,0,800,480);

    /*实例化并设置按钮的盒子的大小和位置*/
    dialogButtonBox = new QDialogButtonBox(this);
    dialogButtonBox -> setGeometry(300,200,200,30);

    /*使用Qt的Cancel按钮*/
    dialogButtonBox -> addButton(QDialogButtonBox::Cancel);

    /*将英文Cancel按钮设置为中文“取消”*/
    dialogButtonBox -> button(QDialogButtonBox::Cancel)-> setText("取消");

    /*设置位置与大小*/
    pushButton = new QPushButton(tr("自定义"));

    /*将PushButton添加到dialogButtonBox,并设定ButtonRole为ActionRole */
    dialogButtonBox -> addButton(pushButton,QDialogButtonBox::ActionRole);

    /*信号槽连接,带参数QAbstractButton *,用于判断用户点击哪个按键*/
    connect(dialogButtonBox,SIGNAL(clicked(QAbstractButton*)),
            this,SLOT(dialogButtonBoxClicked(QAbstractButton*)));
}

MainWindow::~MainWindow() {}

void MainWindow::dialogButtonBoxClicked(QAbstractButton *button)
{
    /*判断点击对象是否为QAbstractButton::Cancel*/
    if(button == dialogButtonBox->button(QDialogButtonBox::Cancel)){
        /*打印“单击了取消键”*/
        qDebug() << "单击了取消键";
        /*判断点击的对象是否为pushButton*/
    }else if(button == pushButton){
        /*打印“单击了自定义键”*/
        qDebug() << "单击了自定义键";
    }
}

//main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值