La Web del Programador: Comunidad de Programadores
http://www.lawebdelprogramador.com/foros/QT/1299550-Poner_valores_maximo_y_minimo_en_un_spinbox_dentro_de_un_QtableWidget.html
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
Francisco (02/12/2011 15:43:57)
2.128 visitas
7 respuestas
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
juan (02/12/2011 19:56:58)
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
Francisco (02/12/2011 22:11:54)
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
juan (02/12/2011 22:17:13)
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
Francisco (03/12/2011 02:54:06)
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
juan (03/12/2011 17:56:54)
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
Francisco (03/12/2011 19:39:12)
Mensajes realizados anteriormente (No estaban la última vez que entraste)Poner valores maximo y minimo en un spinbox dentro de un QtableWidget
juan (07/12/2011 10:38:59)

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por Francisco (4 intervenciones) el 02/12/2011 15:43:57
Desarrollo un aplicacion, y estoy empezando con qt. Tengo una tablewidget y en ella una columna con valores enteros. Cuando edito una celda aparece un spinbox, lo que ahora intento es ponerle un valor maximo y minimo a introducir.

setMinimum ( int min )

Pero al no haber creado yo ese widget no se como cambiarle ese valor.

Gracias. saludos.

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por juan (9 intervenciones) el 02/12/2011 19:56:58
Hola

Échale un vistazo a este ejemplo (también está en la documentación que acompaña a QT Creator, por si te es más fácil de consultar):

http://doc.qt.nokia.com/4.7/itemviews-spinboxdelegate.html

Saludos

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por Francisco (4 intervenciones) el 02/12/2011 22:11:54
Si, le he echado un vistazo, pero en ese ejemplo se crea un delegado, no sé si he de hacerlo yo también o se puede modificar el que ya existe. En fin, no sé como adaptar ese ejemplo a mi programa.

Saludos.

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por juan (9 intervenciones) el 02/12/2011 22:17:13
Claro, crea tu propio delegado. En el ejemplo fíjate que pone un valor mínimo y máximo:

QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setMinimum(0); // mínimo
editor->setMaximum(100); // y máximo, lo que buscas

return editor;
}

Prácticamente te vale con copiar el ejemplo.

Saludos

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por Francisco (4 intervenciones) el 03/12/2011 02:54:06
Si eso lo entendí bien. He intentado añadir el delegado con mis propios valores. He copiado del ejemplo y añadido al proyecto delegate.h, delegate.cpp. La parte que es distinta es que tablewidget está dentro de un MainWindow y ahí es donde inserto el delegado de esta manera:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionDoubleClicked(int)),ui->tableWidget,SLOT(sortByColumn(int))); SpinBoxDelegate delegate; ui->tableWidget->setItemDelegateForColumn(1,&delegate); }

El programa se ejecuta sin errores, pero el spinbox de la casilla selecionada no respeta los valores maximos y minimos.

Saludos y gracias por tu interés.

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por juan (9 intervenciones) el 03/12/2011 17:56:54
Hola

Decláralo como un puntero:

SpinBoxDelegate *delegate = new SpinBoxDelegate;
ui->tableWidget->setItemDelegateForColumn(1, delegate);

He hecho un pequeño ejemplo para comprobar y me ha funcionado, al principio lo hice como pusiste y me ocurría igual, no tomaba lo márgenes.

Desconozco porqué no toma el delegado si no se declara como un puntero.

Saludos

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por Francisco (4 intervenciones) el 03/12/2011 19:39:12
Si, justo lo iba a postear y te has adelantado, hay que instanciarlo:

ui->tableWidget->setItemDelegateForColumn(1,new SpinBoxDelegate);

El caso es que en el ejemplo funciona, pero en mi aplicación no lo hacía. Quizás sea por ir dentro de main(), no sé todavía estoy verde en esto.

Gracias por tu ayuda. Saludos.

Poner valores maximo y minimo en un spinbox dentro de un QtableWidget

Publicado por juan (9 intervenciones) el 07/12/2011 10:38:59
Hola de nuevo

Perdón por la tardanza, pero estuve un poco "desconectado" estos días.

Paso a comentarte el porqué no funciona si se hace como en el ejemplo.

En tu caso estás creando el objeto delegate dentro del constructor, y al terminar este, pues se destruye automáticamente, con lo que el tableWidget usa el delegado por defecto.

En el ejemplo de Qt se crea en la función main y esta no termina hasta que termina el programa, por lo que el objeto no se destruye.

Por eso hay que usar un puntero, así el objeto no desaparece hasta que no se borra con delete. Espero haberte ayudado, no sé si me expresé bien.

Por cierto, ¿Cuáles son las etiquetas para realzar el código?

Saludos