Frage

Ich bin ein studentischer Entwickler, der mit Qt eine GUI erstellt, um Benutzern beim Plotten bestimmter Datenspalten in mehreren Dateien zu helfen.Die Funktion, die ich einrichte, ermöglicht es Benutzern, eine Datei über eine Schaltfläche in jeder Zeile auszuwählen.Die Schaltfläche würde also ursprünglich „Durchsuchen“ lauten und dann klickt der Benutzer darauf, um ein Dialogfeld zum Auswählen einer Datei zu öffnen. Anschließend wird der Schaltflächentext durch den ausgewählten Dateinamen ersetzt.Entschuldigung für die Geschichte;mein einfacher Versuch, etwas Klarheit zu schaffen.

Das Problem, das ich habe, ist, dass ich nicht sicher bin, wie ich eine Richtlinie für die angeklickte Schaltfläche einrichten soll.Ich könnte mir vorstellen, dass ich die Funktionalität jedes QPushButtons erweitern müsste, aber ich weiß nicht wirklich, wie das geht.Bisher verwende ich Folgendes, um das Zellen-Widget festzulegen.

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

ich denke das

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

könnte den Zweck erfüllen, aber ich denke, dass ich hier wahrscheinlich in die falsche Richtung gehe.Ehrlich gesagt bin ich mir nicht einmal sicher, wohin es gehen würde ...

Vielen Dank, dass Sie meinen Beitrag gelesen haben.Bitte teilen Sie mir mit, wenn in diesem Beitrag etwas fehlt. Ich werde ihn dann umgehend aktualisieren.Ich möchte mich auch im Voraus bei allen Beiträgen zu diesem Beitrag bedanken!

War es hilfreich?

Lösung

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

Ist für eine Signal-/Slot-Verbindung syntaktisch nicht korrekt.Passender wäre so etwas:

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

...

Wenn Sie Zugriff auf die entsprechende Schaltfläche benötigen emited die clicked() Signal, als Sie das verwenden könnten sender() Funktion in Ihrem Slot:

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

Jetzt fragen Sie sich vielleicht, woher Sie wissen, welche Zeile Sie bearbeiten müssen.Es gibt verschiedene Ansätze, einer der einfacheren ist die Wartung eines QMap<QPushButton*, int> Mitgliedsvariable, mit der Sie nachschlagen können, welche Schaltfläche zu welcher Zeile gehört.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top