PDA

View Full Version : [Solved] QToolButton Dynamic translation



Osper
30th June 2014, 13:19
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>

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;

};


CODE (mainwindow.cpp):



#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
}
}

...


Thanks a lot! :)

Added after 10 minutes:

Ok, I have managed to solve this by changing QToolButton *btnTParcelTake = new QToolButton(); to btnTParcelTake = new QToolButton(); :)