从对话框窗口Qt信号/插槽连接

时间:2014-07-14 23:27:56

标签: qt

我正在使用Microsoft Visual Studio 12中的Qt进行GUI。

我有一个弹出对话框,其中包含textEdit,我想从用户那里获取一些信息。 然后,当用户单击“确定”按钮时,我希望用户输入的信息显示在主窗口的标签中。代码编译但标签不会改变。

这是我的代码。任何帮助将不胜感激!

在我的对话框.cpp文件中:

void PGTsettings::on_okButton_clicked() {
    QString str;
    str = ui.newFPS->toPlainText(); //newFPS is my textEdit
    emit buttonClick(str);
}

在我的对话框.h文件中:

signals:
    void buttonClick(const QString& txt);

在我的主窗口.cpp文件中:

GUI::GUI(QWidget *parent) : QMainWindow(parent)
{
    pgtsettings = new PGTsettings();
    QObject::connect(pgtsettings, SIGNAL(buttonClick(QString)), this, SLOT(onPGTsettingsok(QString)));
    ui.setupUi(this);
}

void GUI::onPGTsettingsok(QString txt)
{
    ui.label_7->setText(txt); //label_7 is the label I want to display the information in
}

在我的主窗口.h文件中:

private slots:
    void onPGTsettingsok(QString txt);

private:
    PGTsettings* pgtsettings;

有谁知道可能导致此问题的原因?标签不会改变......

谢谢!

3 个答案:

答案 0 :(得分:1)

代码看起来不错。请检查Button与on_okButton_clicked()的连接。 你有吗

Q_OBJECT 
在window.h中

? 为什么在window.cpp中使用“QObject :: connection ...”。你不需要它,因为你的类派生自QMainWindow。

连接效果很好:

信号:

void buttonClick(const QString& txt);

插槽:

void onPGTsettingsok(QString txt);

应该没有问题。

答案 1 :(得分:0)

尝试将对话框.h文件中的信号签名更改为

buttonClick(QString txt);

答案 2 :(得分:0)

你的PGTsettings::on_okButton_clicked()会被执行吗?将qDebug() / QMessageBox放入其中并进行检查。我认为对话框中的插槽没有被调用。

您的PGT设置是否来自QDialog并且是否运行模态?如果是,只需在PGTsettings中创建一个可从GUI访问的成员变量,并在模态对话框返回(unblocks)后查询该变量。你不需要信号。

代码本身对我来说很好。