Hello,
After my last post I did some coding and would like some comment if this the correct way.
I have made 3 widget forms. Named: formOne, formTwo, formThree. On every .ui form I added a listwidget. Which is disabled, because I use a key event to select the items. In the example code, somethings are not there for space savings..
------------------------------------------------------------------
File: formone.h
#include <QWidget>
#include <QKeyEvent>
#include "formtwo.h"
class FromOne : public QWidget
{
Q_OBJECT
public explicit FormOne(QWidget *parent = 0);
~FormOne();
private slots:
void myShow();
private:
Ui::FormOne *ui;
bool event(QEvent *event);
void loadItems();
void focusItem(QListWidgetItem *item);
};
File: formeone.cpp
#include "formone.h"
..
FormOne::FormOne(Widget *parent) :
QWidget(parent), ui(new Ui::FormOne)
{
ui->setupUI(this);
this->loadItems;
}
//Private slot
void FormOne::myShow()
{
this->loadItems();
this->setFocus();
this->show();
}
void FormOne::focusItem(QlistWidget *item)
{
if(item->text() == "FormTwo") {
FormTwo * fromtwo = new FormTwo;
formtwo->setAttribute(Qt::WA_DeleteOnClose);
formtwo->setFocus();
formtwo->show();
connect(formtwo, SIGNAL(destroyed(Object *)), this, SLOT(myShow()));
}
}
void FormOne::loadItems()
{
QListWidgetItem *item;
if(ui->listWidget->count() > 0)
ui->listWidget->clear();
item = new QListWidgetItem
item->setText("FormTwo");
ui->listWidget->additem(item);
item = new QListWidgetItem
item->setText("Nothing");
ui->listWidget->additem(item);
ui->listWidget->setCurrentRow(0);
}
bool FormOne::event(QEvent *event)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
int index=0, size=0;
if(event->type() != QEvent::KeyRelease)
return QWidget::event(event);
switch(keyEvent->key()) {
case Qt::Key_N:
index = ui->listWidget->currentRow();
size = ui->listWidget->count();
if(index < (size-1))
index++;
else
index = 0;
ui->listWidget->setCurrentRow(index);
break;
case Qt::Key_O:
this->focusItem(ui->listWidget->currentItem());
break;
default:
break;
return QWidget::event(event);
}
------------------------------------------------------------------
File: formtwo.h
#include <QWidget>
#include <QKeyEvent>
#include "formthree.h"
class FormTwo: public QWidget
{
Q_OBJECT
public explicit FormTwo(QWidget *parent = 0);
~FormTwo();
private slots:
void myShow();
private:
Ui::FromTwo *ui;
bool event(QEvent *event);
void loadItems();
void focusItem(QListWidgetItem *item);
};
File: formtwo.cpp
#include "formtwo.h"
..
FormTwo::FormTwo(Widget *parent) :
QWidget(parent), ui(new Ui::FromTwo )
{
ui->setupUI(this);
this->loadItems;
}
//Private slot
void FormTwo::myShow()
{
this->loadItems();
this->setFocus();
this->show();
}
void FormTwo::focusItem(QlistWidget *item)
{
if(item->text() == "FormThree") {
FormThree* formthree= new FormThree;
formthree->setAttribute(Qt::WA_DeleteOnClose);
formthree->setFocus();
formthree->show();
connect(formthree, SIGNAL(destroyed(Object *)), this, SLOT(myShow()));
this->hide(); //hide form two
}
}
void FormTwo::loadItems()
{
QListWidgetItem *item;
if(ui->listWidget->count() > 0)
ui->listWidget->clear();
item = new QListWidgetItem
item->setText("FormThree");
ui->listWidget->additem(item);
item = new QListWidgetItem
item->setText("Nothing");
ui->listWidget->additem(item);
ui->listWidget->setCurrentRow(0);
}
bool FormTwo::event(QEvent *event)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
int index=0, size=0;
if(event->type() != QEvent::KeyRelease)
return QWidget::event(event);
switch(keyEvent->key()) {
case Qt::Key_N:
index = ui->listWidget->currentRow();
size = ui->listWidget->count();
if(index < (size-1))
index++;
else
index = 0;
ui->listWidget->setCurrentRow(index);
break;
case Qt::Key_O:
this->focusItem(ui->listWidget->currentItem());
break;
case Qt::key_E;
this->close();
break;
default:
break;
return QWidget::event(event);
}
----------------------------------------------------------
File: formthree.h
#include <QWidget>
#include <QKeyEvent>
class FormThree: public QWidget
{
Q_OBJECT
public explicit FormThree(QWidget *parent = 0);
~FormThree();
private:
Ui::FormThree*ui;
bool event(QEvent *event);
void loadItems();
void focusItem(QListWidgetItem *item);
};
File: formthree.cpp
#include "formthree.h"
..
FormThree::FormThree(Widget *parent) :
QWidget(parent), ui(new Ui::FormOne)
{
ui->setupUI(this);
this->loadItems;
}
void FormThree::focusItem(QlistWidget *item)
{
if(item->text() == "DoSomething") {
.. do something..
}
}
void FormThree::loadItems()
{
QListWidgetItem *item;
if(ui->listWidget->count() > 0)
ui->listWidget->clear();
item = new QListWidgetItem
item->setText("DoSomething");
ui->listWidget->additem(item);
item = new QListWidgetItem
item->setText("Nothing");
ui->listWidget->additem(item);
ui->listWidget->setCurrentRow(0);
}
bool FormThree::event(QEvent *event)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
int index=0, size=0;
if(event->type() != QEvent::KeyRelease)
return QWidget::event(event);
switch(keyEvent->key()) {
case Qt::Key_N:
index = ui->listWidget->currentRow();
size = ui->listWidget->count();
if(index < (size-1))
index++;
else
index = 0;
ui->listWidget->setCurrentRow(index);
break;
case Qt::Key_O:
this->focusItem(ui->listWidget->currentItem());
break;
case Qt::key_E;
this->close();
break;
default:
break;
return QWidget::event(event);
}
Is this the way how I canopen and closes forms?
Thanks in advance..