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

 
Vista:

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.
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

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
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

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.
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

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
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

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:

1
2
3
4
5
6
7
8
9
10
11
12
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.
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

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
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

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:

1
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.
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

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
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