У меня есть следующий класс заявление:соединения от сигнала к слоту возвращает ложь
class nets_list : public QDockWidget
{
Q_OBJECT
private:
QListView * files;
public slots:
void SelectNet(QModelIndex i);
signals:
void NetSelected(QString t);
public:
nets_list(QWidget * parent = nullptr);
};
В какой-то момент в моей nets_list
конструктор, я хочу подключить clicked(QModelIndex)
сигнал files
элемента в слот NetRunner(QString)
в родитель моего класса:
bool x1 = connect(files, SIGNAL(clicked(QModelIndex)), this, SLOT(SelectNet(QModelIndex)));
bool x2 = connect(this, SIGNAL(NetSelected(QString)), parent, SLOT(NetRunner(QString)));
код для SelectNet()
всего:
void nets_list::SelectNet(QModelIndex i)
{
emit NetSelected(fs->fileName(i));
}
потому что я просто хочу извлечь QString
из параметра QModelIndex
, чтобы я мог вызвать слот в родительском классе.
Проблема в том, что второй вызов connect
возвращает false (bool x2
представляется ложным). Зачем?
Также: есть ли лучшее решение для подключения сигналов и слотов с разными типами параметров? Я думал, что использование «промежуточной» функции, такой как мой слот SelectNet(QModelIndex)
, было хорошим решением.
EDIT:
родительский класс
class MW : public QMainWindow
{
Q_OBJECT
private:
QMenu * net_menu;
QMenuBar * menu_bar;
QStackedWidget * ctrl;
netBuilderWidget * builder;
netTrainerWidget * trainer;
netRunnerWidget * runner;
nets_list * nets_dock;
public slots:
void netBuilder();
void netTrainer();
void netRunner(QString t);
void addNet();
public:
MW();
QSize minimumSizeHint() const Q_DECL_OVERRIDE;
QSize sizeHint() const Q_DECL_OVERRIDE;
};
Я не вижу никакого 'слота NetRunner' в любом' parent'? Я думаю, вам нужно разместить больше кода. – Thomas
Есть ли у вашего родителя функция-член публичных слотов, называемая NetRunner()? –
Да, у него есть 'public slots: void netRunner (QString t);' Объявление после макроса 'Q_OBJECT'. – Giorgio