2014-11-22 8 views
1

У меня есть класс mainWindow, который вызывает функцию mainWIndow::ShowDialogBox(), когда дважды щелкнул QTabBar. Появится диалоговое окно, но это не соединение кнопок. У меня есть вызовы connect в ShowDialogBox. Это дает мне красное подчеркивание при подключении говоряКнопка QDialogButtonBox Хорошо не просыпаться после подключения

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

+0

@luliu: Нет. Мы должны? как я сказал, что я новичок, поэтому не могу понять это. – user2

+0

Нет ... ли 'MainWindow' наследует' QMainWindow'? Что произойдет, если вы замените 'connect' на' QObject :: connect'? – Iuliu

ответ

0

Линия:

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

должно быть:

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

Поскольку третий параметр должен быть адрес памяти (указатель).

+0

Спасибо. Соединение работает сейчас, но затем окно немедленно выключается, давая ошибку, говоря «Unhandled exception», а точка останова находится в файле qscopedpointer.h в строке 'inline T * da ta() const { возвращение d; } ' – user2

+0

Я не могу понять, почему он дал мне ошибку. Нужно ли что-либо делать с сигналами и слотами? Потому что я только что объявил слоты, но не определил их, потому что они стандартные слоты. Я делаю что-то неправильно здесь? – user2

+0

@ user2 Я не уверен на 100%, но вполне возможно, что проблема вызвана линией 'dialog.setLayout (& layout);'. Читая документацию 'QWidget :: setLayout', в которой говорится, что« альтернативой вызову этой функции является передача этого виджета конструктору макета ». Вам будет сказано, что передача' dialog' в конструктор 'layout', а также вызов' setLayout ' 'эквивалентно настройке макета дважды, что является очень плохой идеей в' Qt'. Я рекомендую вам либо удалить строку 'dialog.setLayout (& layout);' или изменить строку 'QVBoxLayout layout (& dialog);' to 'QVBoxLayout layout;'. Дайте мне знать, если это сработает. – Iuliu