Question

Je suis un étudiant développeur utilisant Qt pour créer une interface graphique afin d'aider les utilisateurs à tracer des colonnes de données spécifiques situées dans plusieurs fichiers.La fonctionnalité que je mets en place permet aux utilisateurs de sélectionner un fichier à l'aide d'un bouton dans chaque ligne.Ainsi, à l'origine, le bouton dirait parcourir, puis l'utilisateur clique dessus pour ouvrir une boîte de dialogue permettant de sélectionner un fichier, puis le texte du bouton est remplacé par le nom du fichier sélectionné.Désolé pour l'histoire ;ma simple tentative d’ajouter un peu de clarté.

Le problème que j'ai est que je ne sais pas comment définir une politique pour le bouton cliqué.J'imagine que je devrais étendre les fonctionnalités de chacun des QPushButtons mais je ne sais pas vraiment comment faire cela.Jusqu'à présent, j'utilise ce qui suit pour définir le widget de cellule.

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

Je pensais que

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

pourrait faire l'affaire, mais je pense que je vais probablement dans la mauvaise direction ici.Honnêtement, je ne suis même pas sûr de savoir où cela mènerait...

Merci beaucoup d'avoir lu mon message.S'il vous plaît laissez-moi savoir s'il manque quelque chose dans cet article et je le mettrai à jour immédiatement.J'aimerais également remercier par avance toutes les contributions à cet article !

Était-ce utile?

La solution

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

N'est pas syntaxiquement correct pour une connexion signal/emplacement.Quelque chose comme ceci serait plus approprié :

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

...

Si vous avez besoin d'accéder au bouton spécifique qui emited le clicked() signal que vous pourriez utiliser le sender() fonction dans votre emplacement :

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

Maintenant, vous vous demandez peut-être comment savoir sur quelle ligne opérer.Il existe plusieurs approches différentes, l'une des plus simples étant de maintenir un QMap<QPushButton*, int> variable membre que vous pouvez utiliser pour rechercher quel bouton appartient à quelle ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top