QPushButtons in einem QTableWidget abfangen/mit einer Funktion verbinden
-
13-12-2019 - |
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!
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 emit
ed 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.