Closed. This question is not reproducible or was caused by typos。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

4年前关闭。



Improve this question




我有以下类声明:
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似乎为false)。为什么?

另外:是否有更好的解决方案来连接具有不同参数类型的信号和插槽?我认为使用“中间”功能(例如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;
};

最佳答案

更换

SLOT(NetRunner(QString))


SLOT(netRunner(QString))

和连接应该工作。

07-25 23:46
查看更多