2015-09-28 18 views
0

我正在學習Qt 5的一些web示例代碼,但我無法編譯它。我有幾個文件,如:在mainwindow.h ,我有我的代碼:QT 5 connect()函數連接文本編輯器和MainWindow

class MainWindow : public QMainWindow { 
    Q_OBJECT 
public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private: 
    QTextEdit *textEdit; 
}; 

類的實現是在mainwindow.cpp,作爲

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { 
    setWindowTitle("TextPad [*]"); 
    textEdit = new QTextEdit(this); 
    setCentralWidget(textEdit); 
    connect(textEdit,&QTextEdit::textChanged,this,this->setWindowModified(true)); 
} 

在我main.cpp中,這是很簡單的,因爲

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    MainWindow window; 
    window.show(); 
    return app.exec(); 
} 

我想要做的是有一個以「*」的窗口標題,如果我改變了文本編輯文本,所以我用一個connect()函數。問題我不能正確編譯它,錯誤信息是

error: invalid use of void expression 
    connect(textEdit,&QTextEdit::textChanged,this,this->setWindowModified(true)); 

任何幫助表示讚賞!

回答

1

變化

connect(textEdit,&QTextEdit::textChanged,this,this->setWindowModified(true)); 

connect(textEdit,SIGNAL(textChanged()),this,SLOT(myTextChanged())); 
//or you can use alternate form 
connect(textEdit,&QTextEdit::textChanged,this,myTextChanged); 

並限定一個槽

void MainWindow::myTextChanged() { 
    setWindowModified(true); 
} 

connect()需要(使用的話SIGNALSLOT)信號/槽的僅任一名稱或者使用函數指針指向它的指針ter風格,所以你不能在connect()調用中放置代碼執行。相反,如圖所示,定義一個額外的插槽來實現所需的行爲。

+0

謝謝,我應用了你的第二種方法,它能正常工作。代碼中只有一個錯字,但從編譯中很容易找到。 – zhoudingjiang

+0

@zhoudingjiang - 對不起,錯字。我目前無法訪問Qt,所以無法編譯。現在修好了嗎? – owacoder

+0

是的,非常感謝。 – zhoudingjiang