我已经用Qt写了一个程序,它工作得很好,但点击按钮不起作用。当我在类声明之后使用Q_OBJECT时,它会给我带来编译错误。
下面是我的代码:
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QWidget>
class Communicate : public QWidget
{
// Q_OBJECT
public:
Communicate(QWidget *parent = 0);
private slots:
void OnPlus();
void OnMinus();
private:
QLabel *label;
};
Communicate::Communicate(QWidget *parent)
: QWidget(parent)
{
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()));
}
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();
}发布于 2013-02-23 06:20:07
使用O_QBJECT宏,要更正得到的错误,可以执行以下任一操作:
1)在自己的.h文件中声明您的QWidget/QObject派生类,并在自己的.cpp文件中定义它。
2)将moc生成的.moc文件包含在您拥有的.cpp中的类定义之后(添加类似#include“xxxx.moc”的内容)
here:另外,如果你想使用布局而不是使用setGeometry将你的小部件放到窗口中,请阅读更多layouts
发布于 2013-02-23 06:20:19
您需要通过moc运行包含Q_OBJECT宏的文件,并将其输出与其余应用程序一起编译和链接。根据您的构建系统,这会自动发生(qmake)或通过添加一行左右(cmake)
https://stackoverflow.com/questions/15034096
复制相似问题