Есть виджет, назовем его Link, и окно MainWindow. Нужно сделать так, чтобы по нажатию на виджет Link выполнялось какое-то действие из MainWindow, например отрисовка еще одного виджета.
Сделал обработку нажатия на виджет, то есть при нажатии на Link в нем вызывается слот, но как вызвать слот или отправить сигнал в MainWindow не могу понять, ведь они друг о друге ничего не знают и передать MainWindow в конструктор Link'y никак не получится, да и не логично это.
На самом деле структура намного сложнее и привести примеры кода не получится, т.к. его слишком много, но суть проблемы я описал
Если я вас правильно понял, вопрос заключается в том, как послать сигнал от одного виждета другому. Это делается примерно так:
В классе Link
объявим сигнал clicked
и отправим его в методе foo
class Link : public QWidget{
Q_OBJECT
//...
signals:
void clicked();
public:
void foo(){
emit clicked();
}
};
В классе MainWindow
объявим слот doSmth
:
class MainWindow : public QWidget{
Q_OBJECT
public slots:
void doSmth(){
//...
}
};
Соединим:
Link *link = new Link;
MainWindow *mainWindow = new MainWindow;
connect(link, SIGNAL(clicked()), mainWindow, SLOT(doSmth()));
Или если вы используете новый синтаксис:
connect(link, &Link::clicked, mainWindow, &MainWindow::doSmth);
Теперь при вызове метода foo
у link
будет выполнен слот doSmth
у mainWindow
Виртуальный выделенный сервер (VDS) становится отличным выбором
Использую статические открытые переменные типа QMapЗаполнение произвожу с помощью статической функции, которая возвращает QMap
Есть некоторая функция, принимающая в качестве аргумента вектор любого типа через шаблон
Составить функцию, позволяющую определить позицию первого вхождения в заданный строку некоторого символа с другой заданной строкиРезультатом...