correo: elgatoa3@gmail.com |
___________________________|
Para insertar un ComboBox en un TableWidget se debe tener en cuenta si los quiere cargar dinamicamente o no.
Este ejemplo es para el primer caso. (Lo he sacado mirando la ayuda que viene con el Qt).
paso1: Abrir QtCreator
paso2: Archivo/nuevo File or Project/
paso3: En la ventana nuevo seleccionamos en la parte proyectos "Aplicacion Qt4 con Gui" y dar click en siguiente
paso5: Damos nombre al proyecto y seleccionamos la carpeta donde va quedar y dar click en siguiente
paso6: Seleccionamos los modulos requeridos, en mi caso ninguno y dar click en siguiente
paso7: Le damos nombre a la clase base en mi caso "MainWindow", clase base "QMainWindow" y seleccionamos la
opcion "Generar Formulario" y dar click en siguiente
paso8: dar click en Terminar
Ya creamos el proyecto
paso9: Buscamos en la parte izquierda donde estan los proyectos, el formulario creado en mi caso "mainwindow.ui"
y damos doble click para abrirlo y poderlo editar con el QTDesginer que trae el QTCreator.
paso10: presionamos Alt+0 (Alt+ #cero), para cerrar la barra lateral
paso11: En los Widget, buscamos "Table Widget" y lo arrastramos al formulario
paso12: Damos un click en el "Table Widget" que arrastramos y en la barra de propiedades le damos un nombre en la
propiedad "objectName", en mi caso lo llamé "tableWidget" (sin las comillas)
Está un poco largo ufff!!!
paso13: Arrastramos un "push Button" al formulario y lo ubicamos en la parte de arriba
paso14: Ir al menu "Editar/Editar signals-slots" (o presionamos la tecla "F4")
paso15: Damos click sostenido en el boton y deslizamos hasta soltarlo al formulario (NO SOLTARLO EN EL
TABLEWIDGET) hasta que veamos una linea roja que en un extremo esta unida al botón y el otro extremo
unido al formulario y aparece el simbolo de tierra.
paso16: En la ventana que aparece "configure connection" en la parte "pushButton" seleccionamos "clicked()" en la
parte izquierda correspondiente a "MainWindow" damos click en el boton "Edit".
paso17: En la ventana de "Signal/Slots of MainWindow" en la parte de Slot damos click en el boton ADD (+)
escribimos "cargarComboEnTabla()" (sin las comillas) NO necesitamos crear signals por tanto damos click en
aceptar.
paso18: En la ventana "configure connection" seleccionamos en la parte MainWindow "cargarComboEnTabla()" y
presionamos aceptar. Lo que hemos hecho es amarrar el evento click del boton al Slots
"cargarComboEnTabla()" que crearemos a continuación.
paso19: Presionamos Alt+0 para abrir la pestaña de proyectos
paso20: El la carpeta Headers del proyecto damos doble click en el archivo "mainwindow.h"
paso21: presionamos nuevamente Alt+0 para ocultar la barra de proyectos
paso22: en el archivo "mainwindow.h" buscamos la linea "Ui::MainWindow *ui;" (linea 20 +-) y despues de esta linea
escribimos este codigo:
paso23: Guardamos todo
paso24: abrimos el archivo MainWindow.cpp y despues de donde termina la funcion
"void MainWindow::changeEvent" escribimos nuestro slot:
paso25: En el archivo MainWindow.cpp NO olvidar declarar la libreria #include "QComboBox" ya que entonces no
nos aparecera los combos en la tabla
paso26: EJECUTAMOS EL PROGRAMA
Se debe tener en cuenta que en las celdas de la tabla se puede agregar LineEdit, botones, radio buton etc, cualquier tipo de Widget
POR FIN
***************************
CODIGO FUENTE DEL PROYECTO:
***************************
******ARCHIVO ens.pro******
***************************
****************************************
******* ARCHIVO mainwindow.h ***********
****************************************
*****************************************************
*******ARCHIVO ui_mainwindow.h***********************
*****************************************************
***********************************
*******ARCHIVO main.cpp************
***********************************
************************************
********ARCHIVO mainwindow.cpp******
************************************
___________________________|
Para insertar un ComboBox en un TableWidget se debe tener en cuenta si los quiere cargar dinamicamente o no.
Este ejemplo es para el primer caso. (Lo he sacado mirando la ayuda que viene con el Qt).
paso1: Abrir QtCreator
paso2: Archivo/nuevo File or Project/
paso3: En la ventana nuevo seleccionamos en la parte proyectos "Aplicacion Qt4 con Gui" y dar click en siguiente
paso5: Damos nombre al proyecto y seleccionamos la carpeta donde va quedar y dar click en siguiente
paso6: Seleccionamos los modulos requeridos, en mi caso ninguno y dar click en siguiente
paso7: Le damos nombre a la clase base en mi caso "MainWindow", clase base "QMainWindow" y seleccionamos la
opcion "Generar Formulario" y dar click en siguiente
paso8: dar click en Terminar
Ya creamos el proyecto
paso9: Buscamos en la parte izquierda donde estan los proyectos, el formulario creado en mi caso "mainwindow.ui"
y damos doble click para abrirlo y poderlo editar con el QTDesginer que trae el QTCreator.
paso10: presionamos Alt+0 (Alt+ #cero), para cerrar la barra lateral
paso11: En los Widget, buscamos "Table Widget" y lo arrastramos al formulario
paso12: Damos un click en el "Table Widget" que arrastramos y en la barra de propiedades le damos un nombre en la
propiedad "objectName", en mi caso lo llamé "tableWidget" (sin las comillas)
Está un poco largo ufff!!!
paso13: Arrastramos un "push Button" al formulario y lo ubicamos en la parte de arriba
paso14: Ir al menu "Editar/Editar signals-slots" (o presionamos la tecla "F4")
paso15: Damos click sostenido en el boton y deslizamos hasta soltarlo al formulario (NO SOLTARLO EN EL
TABLEWIDGET) hasta que veamos una linea roja que en un extremo esta unida al botón y el otro extremo
unido al formulario y aparece el simbolo de tierra.
paso16: En la ventana que aparece "configure connection" en la parte "pushButton" seleccionamos "clicked()" en la
parte izquierda correspondiente a "MainWindow" damos click en el boton "Edit".
paso17: En la ventana de "Signal/Slots of MainWindow" en la parte de Slot damos click en el boton ADD (+)
escribimos "cargarComboEnTabla()" (sin las comillas) NO necesitamos crear signals por tanto damos click en
aceptar.
paso18: En la ventana "configure connection" seleccionamos en la parte MainWindow "cargarComboEnTabla()" y
presionamos aceptar. Lo que hemos hecho es amarrar el evento click del boton al Slots
"cargarComboEnTabla()" que crearemos a continuación.
paso19: Presionamos Alt+0 para abrir la pestaña de proyectos
paso20: El la carpeta Headers del proyecto damos doble click en el archivo "mainwindow.h"
paso21: presionamos nuevamente Alt+0 para ocultar la barra de proyectos
paso22: en el archivo "mainwindow.h" buscamos la linea "Ui::MainWindow *ui;" (linea 20 +-) y despues de esta linea
escribimos este codigo:
- Código:
public slots:
void cargarComboEnTabla();
paso23: Guardamos todo
paso24: abrimos el archivo MainWindow.cpp y despues de donde termina la funcion
"void MainWindow::changeEvent" escribimos nuestro slot:
- Código:
void MainWindow::cargarComboEnTabla(){
ui->tableWidget->setRowCount(4);
ui->tableWidget->setColumnCount(4);
for (int i = 0 ; i < 4; i++ ){
for (int j = 0 ; j < 4; j++){
ui->tableWidget->setItem(i , j , new QTableWidgetItem );
}
}
for (int i = 0 ; i < 4; i++ ){
for (int j = 0 ; j < 4 ; j++){
ui->tableWidget->setCellWidget(i,j,new QComboBox);
}
}
}
paso25: En el archivo MainWindow.cpp NO olvidar declarar la libreria #include "QComboBox" ya que entonces no
nos aparecera los combos en la tabla
paso26: EJECUTAMOS EL PROGRAMA
Se debe tener en cuenta que en las celdas de la tabla se puede agregar LineEdit, botones, radio buton etc, cualquier tipo de Widget
POR FIN
***************************
CODIGO FUENTE DEL PROYECTO:
***************************
******ARCHIVO ens.pro******
***************************
- Código:
#-------------------------------------------------
#
# Project created by QtCreator 2010-03-18T18:52:20
#
#-------------------------------------------------
TARGET = ens
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
****************************************
******* ARCHIVO mainwindow.h ***********
****************************************
- Código:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private:
Ui::MainWindow *ui;
public slots:
void cargarComboEnTabla();
};
#endif // MAINWINDOW_H
*****************************************************
*******ARCHIVO ui_mainwindow.h***********************
*****************************************************
- Código:
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created: Fri 16. Apr 04:45:50 2010
** by: Qt User Interface Compiler version 4.6.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/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QTableWidget>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralWidget;
QTableWidget *tableWidget;
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"));
tableWidget = new QTableWidget(centralWidget);
tableWidget->setObjectName(QString::fromUtf8("tableWidget"));
tableWidget->setGeometry(QRect(60, 50, 256, 192));
pushButton = new QPushButton(centralWidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(334, 50, 121, 23));
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 21));
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(cargarComboEnTabla()));
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindow", "cargar combo en tabla", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H
***********************************
*******ARCHIVO main.cpp************
***********************************
- Código:
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
************************************
********ARCHIVO mainwindow.cpp******
************************************
- Código:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QComboBox"
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::cargarComboEnTabla(){
ui->tableWidget->setRowCount(4);
ui->tableWidget->setColumnCount(4);
for (int i = 0 ; i < 4; i++ ){
for (int j = 0 ; j < 4; j++){
ui->tableWidget->setItem(i , j , new QTableWidgetItem );
}
}
for (int i = 0 ; i < 4; i++ ){
for (int j = 0 ; j < 4 ; j++){
ui->tableWidget->setCellWidget(i,j,new QComboBox);
}
}
}
Última edición por elgatoa3 el Vie Abr 16, 2010 5:47 am, editado 1 vez