gpt4 book ai didi

c++ - (C++)Code::Blocks 可能错误的 Qt4 设置

转载 作者:行者123 更新时间:2023-11-28 03:57:08 24 4
gpt4 key购买 nike

操作系统:windows xp SP2,编译器:代码:: block 版本。 10.05 ,Qt 4.6

我最近开始学习Qt。起初,简单的 tut 示例一切顺利。我很快遇到了一个无法编译的示例,并意识到出了点问题。

代码如下:

#include <QWidget>
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QDesktopWidget>


class Communicate : public QWidget
{
Q_OBJECT

public:
Communicate(QWidget *parent = 0);

private slots:
void OnPlus();
void OnMinus();

private:
QLabel *label;

};


void center(QWidget *widget, int w, int h)
{
int x, y;
int screenWidth;
int screenHeight;

QDesktopWidget *desktop = QApplication::desktop();

screenWidth = desktop->width();
screenHeight = desktop->height();

x = (screenWidth - w) / 2;
y = (screenHeight - h) / 2;

widget->move( x, y );
}


Communicate::Communicate(QWidget *parent)
: QWidget(parent)
{
int WIDTH = 350;
int HEIGHT = 190;

resize(WIDTH, HEIGHT);

QPushButton *plus = new QPushButton("+", this);
plus->setGeometry(50, 40, 75, 30);

QPushButton *minus = new QPushButton("-", this);
minus->setGeometry(50, 100, 75, 30);

label = new QLabel("0", this);
label->setGeometry(190, 80, 20, 30);

connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus()));


center(this, WIDTH, HEIGHT);

}

void Communicate::OnPlus()
{
int val = label->text().toInt();
val++;
label->setText(QString::number(val));
}

void Communicate::OnMinus()
{
int val = label->text().toInt();
val--;
label->setText(QString::number(val));
}



int main(int argc, char *argv[])
{
QApplication app(argc, argv);

Communicate window;

window.setWindowTitle("Communicate");
window.show();

return app.exec();
}

当我尝试打开它时,我收到以下消息:

obj\Release\main.o:main.cpp||未定义的对“用于通信的 vtable”的引用|

obj\Release\main.o:main.cpp||未定义的对“用于通信的 vtable”的引用|

obj\Release\main.o:main.cpp||未定义的对“用于通信的 vtable”的引用|

obj\Release\main.o:main.cpp||未定义的对“用于通信的 vtable”的引用|

obj\Release\main.o:main.cpp||未定义的对“用于通信的 vtable”的引用|

obj\Release\main.o:main.cpp||更多未定义的 `vtable for Communicate' 引用如下|

||=== 构建完成:6 个错误,0 个警告 ===|

我在寻找code::blocks论坛的解决方案,了解到应该安装Qt插件。

所以,我安装了 QtWorkbench 0.6.0 alpha -> qt 插件,但没有任何改变。

欢迎提出任何建议。

最佳答案

你是否 moc 这个文件并包含 moc 输出以进行编译?

每当您使用 Q_OBJECT 宏时,您必须在该文件上使用 Qt 的 moc 命令来生成一个新的 cpp 文件,该文件也应该包含在要与您的项目一起编译的文件中。此外,我相信您只能 moc 一个头文件,因此您必须将您的类定义移动到一个单独的文件中,然后 moc 该文件。

我不知道它在你的 IDE 中是如何工作的,但在命令行上你会调用类似的东西

<QT4 directory>\bin\moc.exe myfile.h -o moc_myfile.cpp

然后在项目中也包含文件 moc_myfile.cpp。

在某些 IDE 中,这就是 Qt 插件为您所做的;它自动执行所有这些步骤或使用不需要显式 moc'ing 的 qmake。在 Visual Studio 中,我只使用自定义构建步骤。

关于c++ - (C++)Code::Blocks 可能错误的 Qt4 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3096677/

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