correo:
[email protected] |
______________________________|
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 :D
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:
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:
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 :D
Se debe tener en cuenta que en las celdas de la tabla se puede agregar LineEdit, botones, radio buton etc, cualquier tipo de Widget :D
POR FIN
***************************
CODIGO FUENTE DEL PROYECTO:
***************************
******ARCHIVO ens.pro******
***************************
#-------------------------------------------------
#
# 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 ***********
****************************************
#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***********************
*****************************************************
#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 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();
}
************************************
********ARCHIVO mainwindow.cpp******
************************************
#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);
}
}
}