我有以下類聲明:連接返回false
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
構造某些時候,我想了files
成員的clicked(QModelIndex)
信號連接到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));
}
因爲我只是想從QModelIndex
參數中提取QString
,所以我可以調用父類中的插槽。
問題是第二個connect
調用返回false(bool x2
看起來是錯誤的)。爲什麼?
另外:是否有更好的解決方案來連接不同參數類型的信號和插槽?我認爲使用「中間」功能(例如我的SelectNet(QModelIndex)
插槽)是一個很好的解決方案。
編輯:
父類是
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