小编Nel*_*Dav的帖子

Qt:QWidget::paintEngine:不应再被调用

我正在尝试制作一个应用程序,您可以在其中用手指在画布上绘画。
为了实现这一点,我将QWidgetas子类化MFCanvas,在 QML 中使用 注册类
qmlRegisterType<>(),实现虚paintEvent();函数,并在函数内部
绘制它。 问题: 在构建时,抛出此警告:QPainterpaintEvent();


QPainter

QWidget::paintEngine: 不应再被调用

然后,抛出几个其他相关警告:

QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
Run Code Online (Sandbox Code Playgroud)

难怪:QPainter什么都没画……
还有,我应该自己打电话paintEvent();吗?
还是应该每帧都调用它QWidget,而我却以某种方式把它搞砸了?

我在网上搜索,但我发现的所有帖子都没有答案,或者他们
使用的不是QWidget.

我的代码:

mfcanvas.cpp:

#include "mfcanvas.h"
#include <QDebug>
#include <QPainter>
#include <QVector2D>
#include <QList>

MFCanvas::MFCanvas(QWidget *parent) : QWidget(parent)
{
    paths = new QList<QList<QVector2D>*>();
    current = NULL;
    QWidget::resize(100, 100);
}

MFCanvas::~MFCanvas()
{
    delete paths;
} …
Run Code Online (Sandbox Code Playgroud)

c++ qt qpainter

7
推荐指数
2
解决办法
3万
查看次数

如何检查两个变量是否都是 Some?

我对Some(T)关键字感到困惑。

我想检查两个变量,如果值已定义(不是None)。如果是这种情况,则处理此变量的值。

我知道match这样工作的模式:

match value {
    Some(val) => println!("{}", val),
    None => return false,
}
Run Code Online (Sandbox Code Playgroud)

如果我使用这种模式,它会变得非常混乱:

match param {
    Some(par) => {
        match value {
            Some(val) => {
                //process
            },

            None => return false,
        }
    },

    None => return false,
}
Run Code Online (Sandbox Code Playgroud)

这不可能是正确的解决方案。

这是一种可能性,询问参数和值is_some()是否会影响这样的代码:

if param.is_some() && value.is_some() {
    //process
}
Run Code Online (Sandbox Code Playgroud)

但是如果我这样做,我总是必须打开paramvalue访问这些值。

我想过这样的事情来避免这种情况。但是这段代码不起作用:

if param == Some(par) && value == Some(val) {
    //process
}
Run Code Online (Sandbox Code Playgroud)

这个想法是这些值可以被版本访问par并且val就像它们在 …

rust

7
推荐指数
2
解决办法
989
查看次数

直接定义静态QStringList

我想在外部文件中创建和定义静态 QStringList。使用 gcc is 可以这样做:

static QStringList list1 = {item1, item2, item4, ...};
Run Code Online (Sandbox Code Playgroud)

但是使用visualStudio c++ 编译器不可能这样做。我收到错误:

初始化列表不能转换为 QStringList

对我来说重要的是,我可以在声明之后直接定义列表。

因为我不想在主文件中定义它。

例如:

主.cpp:

#include "stringlist.cpp"    
int main()
{
    QList<QStringList> list;
    list << list1;
}
...
Run Code Online (Sandbox Code Playgroud)

字符串列表.cpp:

#include <QStringList>
static QStringList list1 = {"hi", "hello"};
Run Code Online (Sandbox Code Playgroud)

我想这样做是因为 QStringList 的定义很长,如果这么大的定义介于其他代码之间,会很混乱。

qt definition qstringlist

6
推荐指数
1
解决办法
1737
查看次数

VS-Code 任务中带有双反斜杠的路径

我想创建一个 VS-Code 任务,该任务执行 R 命令将 Markdown 转换为 PDF。我目前的任务是这样的:

{
    "label": "rmarkdown -> pdf",
    "type": "process",
    "command": "Rscript",
    "args": ["-e", "\"rmarkdown::render('${file}', 'pdf_document')\""],
    "windows": true,
    "presentation": {
        "reveal": "always",
        "panel": "new"
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,${file}返回这样的路径:

d:\data\documents\myFile.md

但 R 需要一个带有转义反斜杠的路径,如下所示:

d:\\data\\documents\\myFile.md

如何从中获得转义路径${file}

使用普通斜杠的替代路径也可以完成这项工作,因为 R 会自动替换/\\.

visual-studio-code vscode-tasks

5
推荐指数
1
解决办法
1614
查看次数

如果(&lt;object&gt; == &lt;int&gt;)

我不明白,为什么下图中的if语句返回false。我希望你能向我解释。

您可以看到,两个变量的值和类型都相同。

在此处输入图片说明

c# int if-statement object

4
推荐指数
1
解决办法
4213
查看次数

如何使用 if 语句创建属性

我的问题是,如果可能的话,做这样的事情:

public Class Test
{
  public int Number { get; set; }
  private string text;

  public string Text
  {
    if (Number > 5)
    {
      set {text = value;}
      get {return text;}
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

c# if-statement properties

4
推荐指数
1
解决办法
3万
查看次数

Git 查找所有分支的头提交

是否有可能通过其头部提交获取 git 存储库的所有分支。

如果我有以下存储库:

* b562239 (HEAD -> master) lastCommit
* 3828834 (seccondBranch) seccond Commit 
| * 3f6fdf6 (firstBranch) branchCommit
|/  
* b051ccd init repo
Run Code Online (Sandbox Code Playgroud)

我想得到一个这样的列表:

master b562239
seccondBranch 3828834
firstBranch 3f6fdf6
Run Code Online (Sandbox Code Playgroud)

git git-branch

4
推荐指数
1
解决办法
1576
查看次数

Qt 在样式表中使用调色板颜色

在 qt 中,您通常QWidget使用QPalette.

例子:

QPalette palette = new QPalette();
palette.setBrush(QPalette::Base, this->palette().backgorund());

QLineEdit *line = new QLineEdit();
line->setPalette(palette);
Run Code Online (Sandbox Code Playgroud)

现在我有一个小问题。无法使用QPalette. 这意味着,我必须使用QStyleSheet.

例子:

QLineEdit *line = new QLineEdit();
line.setStyleSheet("border: 1px solid green");
Run Code Online (Sandbox Code Playgroud)

但是现在我不能用 设置 QLineEdit 的基色QPalette,因为QLineEdit的背景颜色不再连接到QPalette::base. 这意味着,下面的代码不会改变background-colorQLineEdit

QPalette palette = new QPalette();
palette.setBrush(QPalette::Base, this->palette().backgorund());

QLineEdit *line = new QLineEdit();
line->setPalette(palette);
line->setStyleSheet("border: 1px solid green");
Run Code Online (Sandbox Code Playgroud)

但是background-color,在样式表中定义QLineEdit 的是不可能的,因为background-colorQLineEdit必须是动态的。

我的问题:如何连接QLineEditwith的背景颜色QPalette::base以动态定义 …

qt qtstylesheets qpalette

1
推荐指数
2
解决办法
3819
查看次数

Avoid use of undefined object in c++

If I create a class in c++, it is possible to call a function of an object of this class, even if this class does not exists.

For example:

Class:

class ExampleClass
{
   private:
       double m_data;

   public:
       void readSomeData(double param)
       {
           m_data = param;
       }
}
Run Code Online (Sandbox Code Playgroud)

Any function where this class is used:

int main()
{
    ExampleClass* myClass;

    myClass->readSomeData(2.5);
}
Run Code Online (Sandbox Code Playgroud)

Ofcourse this wouldn't function, because myClass is not defined. To avoid such situations, I check if ExampleClass objects are a …

c++

0
推荐指数
1
解决办法
118
查看次数

(double) 和 double() 之间的区别

我认为这个问题并不新鲜,但我在任何地方都找不到答案。

在 C++ 中(double)myInt和之间有区别double(myInt)吗?

c++ casting

0
推荐指数
1
解决办法
86
查看次数