QT信号槽绑定方式

Qt4.0方式

该方式支持槽函数重载方式,因为需要指定参数类型,Qt5.0以上版本非必要不使用

connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));

Qt5.0方式

该方式为Qt5.0新增的绑定方式,不需要指定参数,如果遇到槽函数有重载的方式会报错

connect(ui.pushButton, &QPushButton::clicked, this, &SlotFunction::pushButtonClicked);

Lambda表达式

另一种方式,支持把槽函数改为了lambda方式

onnect(ui.pushButton, &QPushButton::clicked, this, [=]() {
        QMessageBox::information(this, "click event", "pushButton clicked");
    });

on_objectName_signalName()方式

这个是Qt Designer中常使用的默认方式,只需要按照指定格式定义这个函数即可,但是实际开发中不建议使用这种方式,因为增加了代码的阅读与维护的难度

void on_pushButton_clicked();
// 其中pushButton为控件的对象名称
// clicked为控件的signal名称

Qt信号槽参数绑定自定义对象

当Qt自定义信号槽参数使用的不是默认对象时,会遇到如下错误:

QObject::connect: Cannot queue arguments of type 'ObjectName' (Make sure 'ObjectName' is registered using qRegisterMetaTyoe().)错误

这个时候我们需要使用qRegisterMetaTyoe注册该自定义对象

qRegisterMetaTyoe<ObjectName>("ObjectName");

Qt信号槽重载的绑定方式

Qt4方式解决Qt信号槽重载方式

connect(ui.pushButton, SIGNAL(clicked(bool)), this, SLOT(pushButtonClicked(bool)));

使用QOverload方式解决重载方式

connect(ui->pushButton, QOverload<bool>::of(&QPushbutton::clicked), this, &SettingDialog::clicked);

Qt中文乱码解决方法

使用#pragma execution_character_set("utf-8")宏

在代码中引入#pragma execution_character_set("utf-8")宏

字符串使用u8修饰

ui->pushButton->setText(u8"我是中国人");

使用Qt多语言QTranslator

#include "Translator.h"
#include "ui_Translator.h"

Translator::Translator(QWidget *parent)
    : QWidget(parent),ui(new Ui::TranslatorClass)
{
    ui->setupUi(this);

    ui->labUsername->setText(tr("username"));
    ui->labPassword->setText(tr("password"));
    ui->btnExit->setText(tr("exit"));
    ui->btnLogin->setText(tr("login"));
}

Translator::~Translator()
{
    if (ui)
    {
        delete ui;
    }
}
#include "Translator.h"
#include <QtWidgets/QApplication>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator* translator = new QTranslator;
    QString langPath =  app.applicationDirPath() + "/lang/Translation_zh.qm";
    translator->load(langPath);
    app.installTranslator(translator);

    Translator window;
    window.show();
    return app.exec();
}