gpt4 book ai didi

c++ - QT:对 qApp 属性更改做一些事情

转载 作者:行者123 更新时间:2023-11-28 06:10:00 24 4
gpt4 key购买 nike

我正在使用 QT 属性系统,我想在修改属性后立即运行特定函数。我关注了Qt documentation设置我的属性(property)及其不同的“插槽”(读、写、通知):

class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
Q_ENUMS(Priority)

public:
MyClass(QObject *parent = 0);
~MyClass();

enum Priority { High, Low, VeryHigh, VeryLow };

void setPriority(Priority priority)
{
m_priority = priority;
emit priorityChanged(priority);
}
Priority priority() const
{ return m_priority; }

signals:
void priorityChanged(Priority);

private:
Priority m_priority;
};

如果我理解正确,那么我应该使用 priorityChanged() 函数来实现我想要的。但是如果我在我的 mainwindow.cpp 中定义函数:

void MainWindow::priorityChanged() {
//my code
}

我收到以下错误消息:

fatal error LNK1169: one or more multiply defined symbols found

所以我尝试在标题中编写我的代码,如下所示:

signals:
void priorityChanged(Priority) {
//my code
}

但这也不起作用。

任何帮助将不胜感激,谢谢。 :)

最佳答案

您不应该实现信号。信号由 Qt 在单独的 MOC 生成文件中自动实现。您只需要在 header 中声明信号:

signals:
void priorityChanged(Priority);

并在需要时发出信号(您已经正确地做到了)。

此文档页面可能会有帮助:Signals & Slots .

关于c++ - QT:对 qApp 属性更改做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31473967/

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