QT:做一些qApp属性改变
QT: do something on qApp property change
我正在使用QT属性系统,我想在属性被修改后立即运行特定的函数。我遵循Qt文档来设置我的属性及其不同的"插槽"(READ, WRITE, NOTIFY):
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
}
我得到以下错误信息:
所以我试着把我的代码写在头中,像这样:致命错误LNK1169:找到一个或多个乘法定义的符号
signals:
void priorityChanged(Priority) {
//my code
}
但是这个也不行
任何帮助都会很感激,谢谢。:)
您不应该实现信号。信号由Qt在独立的moc生成的文件中自动实现。你只需要在头文件中声明signal:
signals:
void priorityChanged(Priority);
并在需要时发出信号(您已经正确地这样做了)。
本文档页可能会有所帮助:槽。
priorityChanged()
定义为信号。这不是一个可以实现的函数。
当你在另一个类中使用MyClass
时,这第二个类应该定义一个连接priorityChanged()
信号的插槽。例:
class NewClass
{
QOBJECT
public:
// Blah blah bla
public slots:
void WhatToDo(Priority);
// ...
};
在NewClass
的实现中,您可以定义方法WhatToDo()
:
NewClass::WhatToDo(Priority P)
{
// Your code here
}
然后,在代码的某个地方,你必须实例化两个类,并将信号与插槽连接:
NewClass Class;
MyClass Props;
connect(Props, SIGNAL(priorityChanged(Priority)),
Class, SLOT(WhatToDo(Priority)));
您还可以通过使用this
而不是特定的类实例化在NewClass实现中建立连接。
您还需要从MyClass
中的某个地方emit
signal
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- QT:做一些qApp属性改变