Solved Passing user Input to Slots
-
Hey Everyone,
I'm new to Qt and I find the Signal/Slot Concept in this Framework really helpful. I'm doing some GUI Programming and I'm trying to get some user Input and then do some actions with it. So I have some Qpush Buttons in my GUI when the User clicks one of them he is asked to insert a number or a String.
How can I pass the Input to a Slot that works with it ?
-
@JohnSRV
The slot for clicking the pushbutton does not itself do anything with/know about the number/string you are about to "ask for"; it hasn't happened yet! I trust you get that bit.When the user has clicked the button, how do you intend to "[ask user] to insert a number or a String"? How are you going to prompt for that? Only after that can we discuss how you might use signals/slots to forward the data input onto something else.
-
Hi
How do you then get this number or string? -
@JonB after the User clicks the Button a Dialog Window pops up where the User can insert an IP Adress for example.
void boxconec::Target_IP() { QString TargetIP = QInputDialog::getText(this, "Choose Target system", "Enter the IP Address of the Target System:"); ui->IPAdress->setText(TargetIP); }
So I want to pass this TargetIP Variable to a Function that connects to a QTcp Server listening under the given Address. How can I pass that information to my Client Function?
-
@JohnSRV
How does you client function look like ?
can you just add the new parameter and call itvoid boxconec::Target_IP() { QString TargetIP = QInputDialog::getText(this, "Choose Target system", "Enter the IP Address of the Target System:"); ui->IPAdress->setText(TargetIP); ClientFunction(TargetIP); }
-
-
@mrjj Hey thanks for your reply and sorry for my late Reply. My Client Function is not complete so I tried to test this with a Simple QFile.
void BoxConnector::ProjectButtonPushed() { QString ProjectPath_UserInput = QInputDialog::getText(this, "Project", "Enter the Path to the Project"); ui->Project_Path->setText(ProjectPath_UserInput); QFile Project (Project_UserInput ); if (Project.exists()) { QMessageBox msgBox; msgBox.setText("Opening the Project.."); } else { QMessageBox ErrorBox; ErrorBox.setText("couldn't find the Project.."); } }
I can't seem to get a Message box neither for "Opening the Project.." nor for "couldn't find with the Project". Does the User Input get passed correctly to the QFile with this Code??
-
Hi
You need to call msgBox.exec(); to have it show.
Currently, you just set its text but dont tell it to show:=)
https://doc.qt.io/qt-5/qmessagebox.htmlAlso since you want the user to input the FULL path to a project what about using FileDialog instead so the user can browse to file and not have to type it all?
-
@JohnSRV
QMessageBox::setText()
simply sets the text for the message box, it does not show it. You need to callQMessageBox::exec()
to do that. -
Thank you all for your help ! I solved my problem with the snippet from @mrjj
void boxconec::Target_IP() { QString TargetIP = QInputDialog::getText(this, "Choose Target system", "Enter the IP Address of the Target System:"); ui->IPAdress->setText(TargetIP); ClientFunction(TargetIP); }
The Application will get more complicated where the ClientFunction returns a Value that has to be passed to another slot but I'm not there yet. As for now I'm gonna mark this question as solved.
Thank you !
-
@JohnSRV
What you have ended up with is fine. But be aware you have not encountered any signal/slot stuff in it. In effect, the signal/slot stuff is being hidden from you insideQInputDialog::getText()
, and what you see at this level is a synchronous program. -
Hello Everyone,
I'm back on this topic now. I have a GUI where the User can choose which Project he wants to work with. When he pushes the Button "choose Project" a QFileDialog gets opened.
void BoxConnector::ProjectButtonPushed() { QString ProjectPath_UserInput = QFileDialog::getOpenFileName(this, tr("Open Project"), "C:/Users/Project");
Now I have many other buttons in my GUI where the user could manipulate the chosen project. How Can I pass the Path of the chosen Project to the other Slots?
I for example have a Button where the User could insert a Simulation Step Size
void BoxConnector::SimStepSizePushed() { QString SimSize_UserInput = QInputDialog::getText(this, "Simulation Step Size", "Insert Simulation Step Size"); }
How Can I pass the Path of the chosen Project in the first Slot to this Slot for example so I could manipulate the Simulation Step Size of the chosen Project?
-
Hi
Just make
QString ProjectPath_UserInput;
a member of BoxConnector
so all slots and methods has access. -
@mrjj I declared a QString in the BoxConnector.h.
Its Value gets set in the ProjectButtonPushed() Slot. When I call this String in another Slot it seems to be empty.
-
@JohnSRV
make sure you didnt do the classic error.
you line should be be
ProjectPath_UserInput = QFileDialog::getOpenFileName(this, tr("Open Project"), "C:/Users/Project");and NOT
QString ProjectPath_UserInput = QFileDialog::getOpenFileName(this, tr("Open Project"), "C:/Users/Project");
as then you still use local variable.. -
As a matter of fact I did make the classic Mistake. Thanks !!!
-
@JohnSRV
Thats is why its a classic, very easy to do :)