#include "mainwindow.h"
#include "ui_mainwindow.h"
void startQTimer(MainWindow* parent);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
translator = new QTranslator(this);
isChinese = true;
initListWidget();
initTableWidget();
initComboBox();
initSmallWidget();
initLabel();
// 启动定时器
timerId1 = startTimer(1000);
timerId2 = startTimer(2000);
startQTimer(this);
}
void MainWindow::changeEvent(QEvent *e) {
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
if (!isChinese && ui->comboBox->currentIndex() == 0) {
ui->selectLanguangeComboBox->setCurrentIndex(1);
}
break;
default:
break;
}
}
void MainWindow::on_selectLanguangeComboBox_activated(int index)
{
switch(index) {
// chinese
case 0:
translator->load(":/language/res/ListTableWidgetTest_CN.qm");
isChinese = true;
break;
// english
case 1:
translator->load(":/language/res/ListTableWidgetTest_EN.qm");
isChinese = false;
break;
default:
break;
}
qApp->installTranslator(translator);
ui->retranslateUi(this);
}
/**
* 2. override eventFilter
*
* @brief MainWindow::eventFilter
* @param object
* @param e
* @return
*/
bool MainWindow::eventFilter(QObject* object, QEvent* e) {
if (object == ui->label) {
// 拦截处理鼠标按下事件
if (e->type() == QEvent::MouseButtonPress) {
QMouseEvent* event = static_cast<QMouseEvent*>(e);
handleMousePressEvent(event, "eventFilter()");
return true;
}
}
return QMainWindow::eventFilter(object, e);
}
void MainWindow::initLabel() {
//1. install event filter
ui->label->installEventFilter(this);
}
void startQTimer(MainWindow* parent) {
QTimer* timer = new QTimer(parent);
parent->connect(timer, &QTimer::timeout, parent, [=](){
static int num = 1;
parent->getUi()->label_3->setText(QString::number(num++));
});
timer->start(500);
parent->connect(parent->getUi()->pauseButton, &QPushButton::clicked, parent, [=](){
timer->stop();
});
parent->connect(parent->getUi()->resumeButton, &QPushButton::clicked, parent, [=](){
timer->start(500);
});
}
void MainWindow::timerEvent(QTimerEvent* event) {
if (event ->timerId() == timerId1) {
onTimer1Event(event);
} else if (event->timerId() == timerId2) {
onTimer2Event(event);
}
}
Ui::MainWindow *MainWindow::getUi() const
{
return ui;
}
void MainWindow::onTimer1Event(QTimerEvent* event) {
static int num = 1;
ui->label->setText(QString::number(num++));
}
void MainWindow::onTimer2Event(QTimerEvent* event) {
static int num = 1;
ui->label_2->setText(QString::number(num++));
}
void MainWindow::initSmallWidget(){
connect(ui->getValueButton, &QPushButton::clicked, this, [=](){
qDebug() << ui->widget->getValue();
});
connect(ui->setHalfButton, &QPushButton::clicked, this, [=](){
ui->widget->setValue(50);
});
}
void MainWindow::initComboBox() {
ui->comboBox->addItem("Benz");
ui->comboBox->addItem("BMW");
ui->comboBox->addItem("125 Moto");
connect(ui->selectCarPushButton, &QPushButton::clicked, this, [=](){
// ui->comboBox->setCurrentIndex(2);
ui->comboBox->setCurrentText("BMW");
});
}
void MainWindow::initTableWidget() {
ui->tableWidget->setColumnCount(3);
ui->tableWidget->setRowCount(5);
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"Name" << "Sex" << "Age");
QStringList nameList;
nameList << "yase" << "zhoayun" << "zhangfei" << "guanyu" << "huamulan";
QList<QString> sexList;
sexList<< "Male" << "Male" << "Male" << "Male" << "Female";
for (int i = 0; i < 5; i++) {
int columnIndex = 0;
ui->tableWidget->setItem(i, columnIndex++, new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i, columnIndex++, new QTableWidgetItem(sexList[i]));
ui->tableWidget->setItem(i, columnIndex++, new QTableWidgetItem(QString::number(i)));
}
}
void MainWindow::initListWidget() {
// QListWidgetItem* item = new QListWidgetItem("Hello hello, jin gou bei, jin goubei");
// item->setTextAlignment(Qt::AlignHCenter);
// ui->listWidget->addItem(item);
QStringList list;
list << "Hello hello, jin gou bei, jin goubei" << "Hello hello, jin gou bei, jin goubei"
<< "Hello hello, jin gou bei, jin goubei" << "Hello hello, jin gou bei, jin goubei";
ui->listWidget->addItems(list);
}
MainWindow::~MainWindow()
{
delete ui;
}