QT 5 connect()函数用于连接textEditor和MainWindow

时间:2015-09-28 02:45:11

标签: c++ qt

我正在学习Qt 5,其中有一些来自web的示例代码,但我无法编译它。我有几个文件: 在mainwindow.h中,我有我的代码:

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();
}

我想要做的是在窗口标题中有一个“*”,如果我更改了textEditor中的文本,那么我使用connect()函数。问题我无法正确编译,错误信息为

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

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

更改

private void sets(ArrayList<Integer> save, int answer) {
    String s = ", ";
    String t = "";
    for (int i = 0; i < 6; i += 1) {
        t = t + String.valueOf(save.get(i)) + s;

    }
    for(int n = place ;n<1 ;){
        ArrayList<String> message = new ArrayList<String>();
        message.add(t);
        place=place+1;
        System.out.println(message);
        return;
    }

}

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()SIGNAL)或指向它的指针,使用函数指针样式,这样就无法放置要在SLOT调用中执行的代码。而是定义一个额外的插槽来实现所需的行为,如图所示。