Captura/Conexão QPushButtons dentro de um QTableWidget para uma função
-
13-12-2019 - |
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!
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 emit
ed 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.