Pregunta

Soy un estudiante de desarrollo que utiliza Qt para crear una GUI que ayude a los usuarios a trazar columnas específicas de datos ubicadas en varios archivos.La función que estoy configurando permite a los usuarios seleccionar un archivo usando un botón en cada fila.Entonces, el botón originalmente diría explorar y luego el usuario hace clic en él para abrir un cuadro de diálogo para seleccionar un archivo y luego el texto del botón se reemplaza con el nombre del archivo seleccionado.Perdón por la historia;mi simple intento de agregar algo de claridad.

El problema que tengo es que no estoy seguro de cómo configurar una política para el botón en el que se hace clic.Me imagino que tendría que ampliar la funcionalidad de cada uno de los QPushButtons pero realmente no sé cómo hacerlo.Hasta ahora estoy usando lo siguiente para configurar el widget de celda.

//with row count set dimensions are set becasue column count is static
    //begin bulding custom widgets/QTableWidgetItems into cells
    for(int x = 0; x < ui->tableWidgetPlotLineList->rowCount(); x++)
    {
        for(int y = 0; y < ui->tableWidgetPlotLineList->columnCount(); y++)
        {
            if(y == 1)
            {
                //install button widget for file selection
                QPushButton *fileButton = new QPushButton();
                if(setDataStruct.plotLineListData.at(rowCount).lineFileName != "");
                {
                    fileButton->setText(setDataStruct.plotLineListData.at(rowCount).lineFileName);
                }
                else
                {
                    fileButton->setText("Browse...");
                }
                ui->tableWidgetPlotLineList->setCellWidget(x, y, fileButton);
            }

Estaba pensando eso

connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));

Podría funcionar, pero creo que probablemente estoy yendo en la dirección equivocada.Sinceramente, ni siquiera estoy muy seguro de hacia dónde irá...

Muchas gracias por leer mi publicación.Avíseme si falta algo en esta publicación y lo actualizaré de inmediato.¡También me gustaría agradecer de antemano cualquier contribución a esta publicación!

¿Fue útil?

Solución

connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));

No es sintácticamente correcto para una conexión de señal/ranura.Algo como esto sería más apropiado:

connect(fileButton, SIGNAL(clicked()), this, SLOT(selectPlotLineFile(x));

...

Si necesita acceder al botón específico que emited el clicked() señal de la que podrías usar sender() función en su ranura:

void selectPlotLineFile() {
    QPushButton *button = dynamic_cast<QPushButton*>( sender() )
}

Ahora quizás te preguntes cómo sabes en qué fila operar.Hay varios enfoques diferentes, uno de los más fáciles es mantener un QMap<QPushButton*, int> Variable miembro que puede utilizar para buscar qué botón pertenece a qué fila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top