Having form A access form B
-
In my Qt project I have two UIs (QMainWindow, QDialog) Form A and Form B. How can I make it so that when 'gobutton' on Form B is pressed Form A changes the current index of a tab menu to 1? I have looked at a few things, but they all seem outdated or just didn't work.
TL;DR What's the easiest way to make a button press in one file trigger an event in another?
-
Hi
fastest way is a signal & slot.
http://doc.qt.io/qt-5/signalsandslots.html -
@mrjj I tried using slots or signals, but I got mixed up in connecting a signal from one file to a slot in another. The example in the documentation ("A Small Example") does not showcase or go over how it's done when attempting to do cross-file/cross-ui. Is there a better tutorial covering this?
-
Hi
try this
https://www.dropbox.com/s/lev1yukhpkgxhbe/myotherdialog.zip?dl=0
If still unclear let me know and ill try to explain.// How it works: // We make new signal for dialog to send class MyDialog : public QDialog { Q_OBJECT public: ... signals: void ChangeTab(int index); <<< new signal. ... }; // and for GO button we do void MyDialog::on_Go_clicked() { emit ChangeTab( 1 ); // tell the world } // then in main we do void MainWindow::on_ShowDialog_pressed() { MyDialog dialog; // connect directly from dialogs new signal to the slot for index for the tabwidget connect(&dialog, SIGNAL(ChangeTab(int)), ui->tabWidget, SLOT(setCurrentIndex(int))); dialog.exec(); // show it }
-
i assume it is the same if I want to append to a TextBox correct?
Well almost, but signal and slot have parameters so make sure to match it up.
Like
void QTextEdit::append(const QString &text)to send a signal to that slot, it must be a string we sent.
Say our signal from before
void ChangeTab(int index);
is no good as that is an int.
however if we made new signal
void ChangeStatusText(const QString &text);
that would match the widgets slot.But yes very the same.
-
@mrjj Sorry to re-open this thread, but I've one last question whcih my search terms haven't seemed to answer. Is there a way I can emit a signal from something that is not a UI?
I have a file called functions.cpp/.h which dialog.cpp calls out to after the go button is pressed, but I want to ->append() things to a textBrowser.