2014-11-22 52 views
1

我有一个mainWindow类,当双击QTabBar时调用函数mainWIndow::ShowDialogBox()。该对话框出现,但它没有连接按钮。我在ShowDialogBox中有连接调用。它给了我一个红色下划线上连接话说QDialogBu​​ttonBox按钮好吧,不要在连接之后再打

no instance of overloaded function "MainWindow::connect" matches the argument list" 

这是我的代码

bool MainWindow::eventFilter(QObject *object, QEvent *event) 
{ 
    if (object == mTabWidget->getTabBar() && event->type() == QEvent::MouseButtonDblClick) 
    { 
     qDebug()<<"dblclk"; 

    ShowDialogBox(); 

    } 

    return QObject::eventFilter(object, event); 
} 

//Show dialog box when double clicked on QTabBar 
void MainWindow::ShowDialogBox(){ 

    QDialog dialog; 
    QVBoxLayout layout(&dialog); 
    QLineEdit editLine; 
    layout.addWidget(&editLine); 

    QDialogButtonBox *dialogButton = new QDialogButtonBox(QDialogButtonBox::Ok); 
    connect(dialogButton, SIGNAL(accepted()), dialog, SLOT(accept())); //this 'connect' is underlined 
    layout.addWidget(dialogButton); 
    dialog.setLayout(&layout); 


    if(dialog.exec() == QDialog::Accepted) 
    { 
     mTabWidget->setTabText(0, editLine.text()); 
    } 

    } 

我已经加入的信号和插槽mainWindow.h作为

private slots: 
    void accept(); 

signals: 

    void accepted(); 

我不得不花费数小时在这但没有运气。我是Qt新手。

+0

你有没有实现你的MainWindow :: connect功能? – Iuliu 2014-11-22 18:54:45

+0

@luliu:不需要吗?正如我所说我是新的,所以不能真正弄清楚。 – user2 2014-11-22 18:56:13

+0

没有...... MainWindow继承QMainWindow吗?如果你用'QObject :: connect'替换'connect'会发生什么? – Iuliu 2014-11-22 19:38:47

回答

0

线:

connect(dialogButton, SIGNAL(accepted()), dialog, SLOT(accept())); 

应该是:

connect(dialogButton, SIGNAL(accepted()), &dialog, SLOT(accept())); 

由于第三参数必须是一个存储器地址(指针)。

+0

谢谢。现在连接工作,但随后窗口立即关闭,出现错误提示'未处理的异常',并且断点位于文件qscopedpointer.h inline T * da ta()const { return d; }' – user2 2014-11-22 22:14:11

+0

我无法理解为什么它给了我一个错误。它是否必须对信号和插槽做任何事情?因为我刚刚宣布了这些插槽,所以没有定义它们,因为它们是标准插槽。我在这里做错了什么? – user2 2014-11-22 22:18:00

+0

@ user2我不是100%肯定的,但可能是由'dialog.setLayout(&layout);'行引起的问题。阅读'QWidget :: setLayout'文档,它说'调用这个函数的另一种方法是将这个小部件传递给布局的构造函数.'会告诉你'将'dialog'传递给'layout'的构造函数,并调用'setLayout '相当于设置两次布局,这在'Qt'中是一个非常糟糕的主意。我建议你删除行'dialog.setLayout(&layout);'或者将行'QVBoxLayout布局(&dialog);'转换为'QVBoxLayout布局;'。让我知道它是否有效。 – Iuliu 2014-11-22 22:26:11