QT编程笔记
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();
}
Comments