我正在使用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;
有谁知道可能导致此问题的原因?标签不会改变......
谢谢!
答案 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)后查询该变量。你不需要信号。
代码本身对我来说很好。