QT - Creacion de TextEdit dinamicos QTCreator

   
Vista:

Creacion de TextEdit dinamicos QTCreator

Publicado por william (27 intervenciones) el 08/03/2010 00:54:43
correo: elgatoa3@gmail.com |
________________________|

Que se pretende:
Crear un formulario con un comboBox en el cual se pueda seleccionar un numero del 1 al 9.
Luego, de seleccionado el numero,con un boton se ejecutará el codigo que hace que aparezcan el numero especificado en TextEdit. Ejemplo: Si selecciono el numero 9 del comboBox y oprimo el boton, debe mostrar 9 TextEdit ordenados verticalmente. Si vuelvo a seleccionar el comboBox con el numero 3, y oprimo el boton, se deben borrar los 9 TextEdit anteriores y en su lugar mostrar solo 3 TextEdti ordenados verticalmente. Todo esto en un solo formulario

El problema:
Puedo implementar la primera ves la cantidad de TextEdit que quiero, pero para la segunda ves no puedo, ya que el boton queda totalmente bloqueado. El codigo esta en "mainwindow.cpp" en el slot "on_pushButton_clicked" (puse asteriscos (****) para indicar final de los archivos) :D

Este es el codigo fuente del proyecto:

// libreria ui_mainwindow.h

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
QWidget *centralWidget;
QLineEdit *lineEdit;
QLabel *label;
QPushButton *pushButton;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;

void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(600, 400);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
lineEdit = new QLineEdit(centralWidget);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
lineEdit->setGeometry(QRect(40, 30, 113, 20));
label = new QLabel(centralWidget);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(280, 40, 46, 13));
pushButton = new QPushButton(centralWidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(200, 30, 75, 23));
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 20));
MainWindow->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(MainWindow);
statusBar->setObjectName(QString::fromUtf8("statusBar"));
MainWindow->setStatusBar(statusBar);

retranslateUi(MainWindow);

QMetaObject::connectSlotsByName(MainWindow);
} // setupUi

void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
} // retranslateUi

};

namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

//fin libreria* **************************************************************************

//libreria mainwindow.h***************************************************************
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui/QLineEdit>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
QLineEdit *edit[10];
~MainWindow();

protected:
void changeEvent(QEvent *e);

private:
Ui::MainWindow *ui;

private slots:
void on_pushButton_clicked();
};

#endif // MAINWINDOW_H
//fin libreria*********************************************************************

//mainwindow.cpp**************************************************************
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

void MainWindow::on_pushButton_clicked()
{ float valor=ui->lineEdit->text().toInt();
ui->setupUi(this);
for(int i=1; i<=valor; i++){
edit[i] = new QLineEdit(MainWindow::centralWidget());
edit[i]->setObjectName(QString::fromUtf8("lineEdit"));
edit[i]->setGeometry(QRect(40, 30+i*35, 90, 20));
}
}

//fin mainwindow.cpp *****************************************************************

//main.cpp ******************************************************************************
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
//fin main.cpp********************************************************
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Creacion de TextEdit dinamicos QTCreator

Publicado por william (27 intervenciones) el 10/03/2010 18:19:07
correo: elgatoa3@gmail.com |
________________________|

Ya lo resolví. Esta noche coloco el código. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Creacion de TextEdit dinamicos QTCreator

Publicado por william (27 intervenciones) el 12/03/2010 05:25:13
correo: elgatoa3@gmail.com |
_______________________|

Perdón por tardar la respuesta.

Primero que todo creamos un formulario que tenga un "LineEdit", un Label y dos botones.
Si estamos utilizando QTCREATOR vamos al menú EDITAR y luego a SIGNAL-SLOTS

Procedemos a dar click sostenido en uno de los botones y arrastramos hasta el formulario y soltamos.
Se abre una ventana "Configure Connection" en la parte del boton seleccionamos "clicked()" y en la otra parte seleccionamos el boton "edit".
Con el boton "edit" se nos abre otra ventana "Signals/Slots", en la parte de "Slots" seleccionamos el boton "+" (Add), y escribimos "crear_ens()" (sin las comillas), y precionamos aceptar. En la ventana "Configure Connection" seleccionamos "show signals and slots inherited from QWidget" para habilitar el Slots creado. Luego en la misma ventana seleccionamos el Slots "crear_ens()" y damos aceptar.
Con ello se le ha asignado al boton el slot asignado.

Ahora se procede a crear el slot.
Si utilizas QTCREATOR 1.3.1 con QT 4.6.1, se declara el slots en la libreria mainwindow.h y un array de "QTextEdit" o de cualquier componente QWidget que quieran crear.
luego en mainwindow.cpp se crea el slot propiamente dicho.
Lo que he hecho no es orientado a objetos :'( pero es funcional :D

Explicacion de lo que hace el programa:
En el "lineEdit" escribes un numero del 0-9 y cuando haces click en el boton crear dinamico aparecen el numero de "lineEdit" ordenados verticalmente.
Luego escribes "cualquier cosa" en el primer "lineEdit" creado dinamicamente y al pulsar el boton "capturarDinamico" en el "Label" aparece lo que escribiste en el primer "LineEdit". (Esto me ha servido para crear un programa para guardar info en una base de datos, ya que puedes recorrer los LineEdit con un for o un while y concatenas la info de los lineEdit en un QString para luego hacer el insert; aunque esto se sale del ejemplo :( )

Acontinuacion anexo el codigo fuente: Utilizo (********), para separa el codigo de las librerias y los archivos:

ARCHIVO ens.pro

#-------------------------------------------------
#
# Project created by QtCreator 2010-03-11T22:49:28
#
#-------------------------------------------------

QT += sql

TARGET = ens
TEMPLATE = app

SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

#fin ens.pro

*************************************************************************

ARCHIVO ui_mainwindow.h

/********************************************************************************
** Form generated from reading ui file 'mainwindow.ui'
**
** Created: Thu Mar 11 23:17:22 2010
** by: Qt User Interface Compiler version 4.5.2
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
QWidget *centralWidget;
QPushButton *pushButton;
QLabel *label;
QLineEdit *lineEdit;
QPushButton *pushButton_2;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;

void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(600, 400);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
pushButton = new QPushButton(centralWidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(180, 80, 131, 27));
label = new QLabel(centralWidget);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(340, 40, 131, 17));
lineEdit = new QLineEdit(centralWidget);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
lineEdit->setGeometry(QRect(50, 80, 113, 27));
pushButton_2 = new QPushButton(centralWidget);
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
pushButton_2->setGeometry(QRect(180, 40, 131, 27));
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 25));
MainWindow->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(MainWindow);
statusBar->setObjectName(QString::fromUtf8("statusBar"));
MainWindow->setStatusBar(statusBar);

retranslateUi(MainWindow);
QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(crear_ens()));
QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(capturar_ens()));

QMetaObject::connectSlotsByName(MainWindow);
} // setupUi

void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindow", "crear dinamico", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("MainWindow", "Mostrar dinamico", 0, QApplication::UnicodeUTF8));
pushButton_2->setText(QApplication::translate("MainWindow", "Capturar dinamico", 0, QApplication::UnicodeUTF8));
Q_UNUSED(MainWindow);
} // retranslateUi

};

namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

****************************************************************************************

ARCHIVO mainwindow.cpp

******************************************************************************************
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

void MainWindow::crear_ens(){
valorCap=ui->lineEdit->text().toInt();
ui->setupUi(this);
for(int i=0; i<valorCap; i++){
line_ens[i] = new QLineEdit(MainWindow::centralWidget());
line_ens[i]->setObjectName(QString::fromUtf8("lineEdit"));
line_ens[i]->setGeometry(QRect(150, 180+i*35, 113, 27));

}
}

void MainWindow::capturar_ens(){
valorCapString=line_ens[0]->text();
ui->label->setText(valorCapString);
}

*************************************************************
ARCHIVO main.cpp

************************************

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

****************************************************************

y eso es todo.
La verdad soy novato en QTCreator, pero cualquier duda con gusto ayudaré en lo que más pueda.

El programa fue probado en Linux Ubuntu 9.10 y en Windows XP funciona perfecto
Como puedo colocar imagenes en el foro? me gustaria colocar unas capturas de pantalla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Creacion de TextEdit dinamicos QTCreator

Publicado por william (27 intervenciones) el 16/03/2010 17:41:33
correo: elgatoa3@gmail.com |
______________________________|

¿por que postear este programa tan basico?... Primera razon: por que tal ves alguien se le presente esta duda como me pasó a mi. Segunda razón: es para que observaran la parte del codigo en donde aparece "ui->setupUi(this);" que es lo que utilizo para crear nuevamente el formulario, (¿existe otra forma de realizar esto mismo?).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Creacion de TextEdit dinamicos QTCreator

Publicado por william (27 intervenciones) el 30/03/2010 18:53:40
correo: elgatoa3@gmail.com |
________________________|

En la experiencia que he tenido en estos meses, creo que esta forma de cargar los QLineEdit es poco práctica aunque funcional.

La verdad ahora prefiero cargar los QLineEdit con tablas que cargarlos redibujando el formulario. Acá hay un ejemplo de esto pero con QComboBox

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=258&texto=QT&n1=557207&n2=2&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar