gpt4 book ai didi

c++ - 无法使信号和插槽在 Qt 中工作

转载 作者:太空宇宙 更新时间:2023-11-04 16:24:11 25 4
gpt4 key购买 nike

我正在尝试使用 Qt 学习 C++ 以实现一些基本的可视化应用程序。我想在开始时做一些简单的事情,当我按下一个按钮时,我想在某处显示一条文本消息。这是我的代码:

主要.h

#ifndef MYAPP_H
#define MYAPP_H

#include <QWidget>

class QLabel;
class QString;

class MyApp : public QWidget{
public:
MyApp(QWidget *parent = 0);
protected slots:
void showIt();
private:
QString *text_msg;
QLabel *message;
};

#endif

主要.cpp

#include <QApplication>
#include <QFont>
#include <QPushButton>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QFrame>
#include <QString>
#include <vector>
#include <string>
#include <map>
#include "main.h"

#include <fstream>

using std::map;
using std::vector;
using std::string;
using std::ofstream;



/* implementation */
MyApp::MyApp(QWidget *parent):QWidget(parent){

QString text_msg;
text_msg = "This is my first message written in C++! \n It was printed with Qt!";

setFixedSize(400, 280);

QPushButton *quit = new QPushButton(tr("Quit"), this);
quit->setGeometry(62, 40, 75, 50);
quit->setFont(QFont("Times", 18, QFont::Bold));

QPushButton *show_msg = new QPushButton(tr("Show!"), this);
show_msg->setGeometry(30,15,75,45);
show_msg->setFont(QFont("Times", 18, QFont::Bold));


//message = new QLabel();
QLabel *message = new QLabel(this);
//message->setFrameStyle(QFrame::Panel | QFrame::Sunken);
//message->setText(text_msg);
//message->setText("asdf");

connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
connect(show_msg, SIGNAL(clicked()), qApp, SLOT(showIt()));

QVBoxLayout *layout = new QVBoxLayout;


layout->addWidget(message);
layout->addWidget(show_msg);
layout->addWidget(quit);


setLayout(layout);

ofstream myfile;
myfile.open ("example");
myfile << "Writing this to a file.\n";
myfile.close();
}

void MyApp::showIt(){
//*text_msg = "xyz";
ofstream myfile;
myfile.open ("example");
myfile << "12121212121.\n";
myfile.close();
message->setText("1234");
}



int main(int argc, char *argv[])
{
/* assign messages for output
bool result;
string key = "first", message="this is a sample text";
result = Messages::add_message(key, message);
*/
/* end */
QApplication app(argc, argv);
MyApp my_simple_app;
my_simple_app.show();
return app.exec();

}

我不明白为什么程序不运行slot成员函数。我放了一些代码,应该在文件中打印一些文本,以了解该函数内的代码是否会被执行,问题出在 QLabel 消息上,但成员函数没有被执行。

谁能帮帮我?

谢谢。

最佳答案

我需要对您的代码进行 3 处更改才能使其正常工作:

首先,在 main.h 中你需要使用 Q_OBJECT 宏:

class MyApp : public QWidget {
Q_OBJECT

其次,在 main.cxx 中,您需要将连接调用更改为正确的接收器(this 而不是 myApp):

connect(show_msg, SIGNAL(clicked()), this, SLOT(showIt()));

第三,在 main.cxx 中,您需要取消注释创建 message 标签作为类成员的代码:

message = new QLabel(this);

关于c++ - 无法使信号和插槽在 Qt 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13708814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com