Pergunta

Sou um estudante de desenvolvedor usando o Qt para criar uma GUI para ajudar os usuários a trama colunas específicas de dados localizados em vários arquivos.A característica que eu estou configuração permite que os usuários para selecionar um arquivo usando um botão em cada linha.Assim, o botão originalmente iria dizer procurar e, em seguida, o usuário clica nele para abrir uma caixa de diálogo para selecionar um arquivo, em seguida, o texto do botão é substituído com o nome do arquivo selecionado.Desculpem a história;minha simples tentativa de adicionar alguma clareza.

O problema que eu estou tendo é que eu não sou certo como definir uma política para o botão clicado.Eu imagino que eu teria para estender a funcionalidade de cada um dos QPushButtons mas eu realmente não sei como fazer isso.Até agora eu estou usando o seguinte para definir a célula widget.

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

Eu estava pensando que

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

pode fazer o truque, mas eu acho que eu provavelmente estou indo na direção errada aqui.Honestamente, eu não estou muito certo de como e onde ele iria...

Muito obrigado por ler o meu post.Por favor, deixe-me saber se há algo que falta a partir deste post e vou atualizá-lo imediatamente.Eu também gostaria de agradecer as contribuições para este post antecipadamente!

Foi útil?

Solução

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

Não é sintaticamente correto para um signal/slot de conexão.Algo como isso seria mais apropriado:

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

...

Se você precisar acessar o botão específico que emited o clicked() sinal de que você poderia usar o sender() função no seu slot:

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

Agora você pode estar se perguntando como você sabe qual linha para funcionar.Existem várias abordagens diferentes, uma das mais fáceis de manter uma QMap<QPushButton*, int> variável de membro que você pode usar para pesquisa de qual botão pertence a qual linha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top