Domanda

IM uno sviluppatore studente utilizzando Qt per creare una GUI per aiutare gli utenti a tracciare colonne specifiche di dati situati in più file. La funzione che sto configurando consente agli utenti di selezionare un file utilizzando un pulsante in ogni riga. Quindi il pulsante originariamente direbbe Sfoglia e quindi l'utente fa clic per aprire una finestra di dialogo per selezionare un file, il testo del pulsante viene sostituito con il nome del file selezionato. Ci scusiamo per la storia; il mio semplice tentativo di aggiungere una certa chiarezza.

Il problema che sto avendo è che non sono sicuro di come impostare un criterio per il pulsante cliccati. Immagino che dovrei estendere la funzionalità di ciascuno dei qpushbuttons, ma non so davvero come farlo. Finora sto usando quanto segue per impostare il widget della cella.

//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);
            }
.

Stavo pensando che

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

potrebbe fare il trucco ma penso che probabilmente sto andando nella direzione sbagliata qui. Onestamente non sono nemmeno sicuro di dove sarebbe andato ...

Grazie mille per aver letto il mio post. Per favore fatemi sapere se c'è qualcosa che manca da questo post e lo aggiornerò immediatamente. Mi piacerebbe anche ringraziare qualsiasi contributo a questo post in anticipo!

È stato utile?

Soluzione

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

non è sintatticamente corretto per una connessione di segnale / slot.Qualcosa come questo sarebbe più appropriato:

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

...

Se è necessario accedere al pulsante specifico che emited Il segnale clicked() di quanto è possibile utilizzare la funzione sender() nello slot:

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

Ora potresti chiederti come sai quale fila funziona.Esistono diversi approcci diversi, uno dei più facili per mantenere una variabile membro di QMap<QPushButton*, int> che è possibile utilizzare per cercare quale pulsante appartiene a quale riga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top