2014-11-22 54 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