【问题标题】:Qt (C++) log gets filled with "Widget (address) does not have a property named (var)"Qt(C++)日志被“Widget(地址)没有名为(var)的属性”填充
【发布时间】:2018-04-23 03:34:04
【问题描述】:

当在 Qt Creator 中运行程序时,控制台日志会充满消息说...

QMenu(0x21aef3db1c0) does not have a property named "myVar"

我只有 ma​​in.cppma​​inwindow.cpp/h。我在主窗口中使用 Q_PROPERTY。

ma​​inwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // code here
}

QColor MainWindow::getMyVar() const
{
    return myVar;
}

void MainWindow::setMyVar(QColor c)
{
    myVar = c;
}

MainWindow::~MainWindow()
{
}

ma​​inwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT
    Q_PROPERTY(QColor myVar READ getMyVar WRITE setMyVar DESIGNABLE true)

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QColor getMyVar() const;
    void setMyVar(QColor c);
private:
    QColor myVar;
};

#endif // MAINWINDOW_H

stylesheet.qss

* {
    qproperty-myVar: red;
}

这条消息的意义何在?我能做些什么来摆脱它?

【问题讨论】:

  • 你确定这就是你的全部代码吗?您已经在 .h 中声明了析构函数,但我没有在 .cpp 中看到实现。我建议您删除构建文件夹并重新编译。
  • @eyllanesc 我已经更新了帖子,析构函数在 cpp 中,我只是出于某种原因没有将它粘贴到这里。我已经完成了干净的 qmake 和重建,但没有帮助。
  • 错误消息似乎来自Qt 样式表代码。您是否在 QMenu 的上下文中使用任何引用 myVar 的样式表?
  • @G.M.我正在从 main 加载一个外部样式表文件。我从 Visual Studio 转到 Qt IDE,但我不记得看到此错误。但它完全是垃圾邮件并填满了 Qt 中的控制台日志,它会为程序中的每个小部件打印消息,因此列表变得非常大。
  • 样式表有多大?如果不是太大,请编辑您的问题以尽可能显示它。

标签: c++ qt


【解决方案1】:

样式表规则中的* 匹配所有内容:

* {
    qproperty-myVar: red;
}

这意味着此样式将应用于所有小部件,而不仅仅是您的MainWindow 小部件。例如,它将应用于主窗口的QMenu,而Qt 在这里抱怨QMenu 没有myVar 属性——实际上它没有!

请尝试以下方法:

MainWindow {
    qproperty-myVar: red;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多