Hi everyone!
I am writing a QT C++ application which uses a dynamic translation. It works fine with QPushButton, but it crashes when I try to dynamically translate QToolButton.
Could anyone point me in the right direction to solve this problem?
Declaration (mainwindow.hpp):
#include <QMainWindow>
Q_OBJECT
public:
public slots:
private slots:
void setLangEn();
void setLangSl();
private:
void changeEvent
(QEvent *event
);
};
#include <QMainWindow>
class QStackedWidget;
class QPushButton;
class QToolButton;
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QMainWindow *parent = 0);
public slots:
private slots:
void setLangEn();
void setLangSl();
private:
void closeEvent(QCloseEvent *event);
void changeEvent(QEvent *event);
QPushButton *cancelBtn;
QToolButton *btnTParcelTake;
};
To copy to clipboard, switch view to plain text mode
CODE (mainwindow.cpp):
#include <QtGui>
#include <QtWidgets>
#include <QTranslator>
#include "main.h"
#include "mainwindow.h"
...
...
cancelBtn->setObjectName("textBtn");
cancelBtn->setVisible(false);
connect(cancelBtn, SIGNAL(clicked()), this, SLOT(calcelCurrentProccess()));
btnTParcelTake->setText(tr("Take Package"));
btnTParcelTake->setObjectName("choice");
btnTParcelTake->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
btnTParcelTake
->setIcon
(QIcon(QPixmap(":img/btn-parcel-take.png")));
btnTParcelTake
->setIconSize
(QSize(248,
248));
connect(btnTParcelTake, SIGNAL(clicked()), sm, SLOT(map()));
sm->setMapping(btnTParcelTake, 1);
...
}
void MainWindow::setLangEn() {
qApp->removeTranslator(&appTranslator);
if (appTranslator.load("rc/translations/translation_en.qm", ".")) {
qWarning("Translating to EN");
qApp->installTranslator(&appTranslator);
}
}
void MainWindow::setLangSl() {
qApp->removeTranslator(&appTranslator);
if (appTranslator.load("rc/translations/translation_sl.qm", ".")) {
qWarning("Translating to SLO");
qApp->installTranslator(&appTranslator);
}
}
void MainWindow
::changeEvent(QEvent *event
) { if (event
->type
() == QEvent::LanguageChange) { setWindowTitle(tr("Translated"));
cancelBtn->setText(tr("Cancel"));
btnTParcelTake->setText(tr("Take Package")); //<<= program crashes when I use this command
}
}
...
#include <QtGui>
#include <QtWidgets>
#include <QTranslator>
#include "main.h"
#include "mainwindow.h"
...
MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent) {
...
cancelBtn = new QPushButton(tr("Cancel"));
cancelBtn->setObjectName("textBtn");
cancelBtn->setVisible(false);
connect(cancelBtn, SIGNAL(clicked()), this, SLOT(calcelCurrentProccess()));
QToolButton *btnTParcelTake = new QToolButton();
btnTParcelTake->setText(tr("Take Package"));
btnTParcelTake->setObjectName("choice");
btnTParcelTake->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
btnTParcelTake->setIcon(QIcon(QPixmap(":img/btn-parcel-take.png")));
btnTParcelTake->setIconSize(QSize(248, 248));
connect(btnTParcelTake, SIGNAL(clicked()), sm, SLOT(map()));
sm->setMapping(btnTParcelTake, 1);
...
}
void MainWindow::setLangEn() {
qApp->removeTranslator(&appTranslator);
if (appTranslator.load("rc/translations/translation_en.qm", ".")) {
qWarning("Translating to EN");
qApp->installTranslator(&appTranslator);
}
}
void MainWindow::setLangSl() {
qApp->removeTranslator(&appTranslator);
if (appTranslator.load("rc/translations/translation_sl.qm", ".")) {
qWarning("Translating to SLO");
qApp->installTranslator(&appTranslator);
}
}
void MainWindow::changeEvent(QEvent *event) {
if (event->type() == QEvent::LanguageChange) {
setWindowTitle(tr("Translated"));
cancelBtn->setText(tr("Cancel"));
btnTParcelTake->setText(tr("Take Package")); //<<= program crashes when I use this command
}
}
...
To copy to clipboard, switch view to plain text mode
Thanks a lot!
Added after 10 minutes:
Ok, I have managed to solve this by changing QToolButton *btnTParcelTake = new QToolButton(); to btnTParcelTake = new QToolButton();
Bookmarks