我正在尝试制作一个应用程序,您可以在其中用手指在画布上绘画。
为了实现这一点,我将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) 我对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)
但是如果我这样做,我总是必须打开param并value访问这些值。
我想过这样的事情来避免这种情况。但是这段代码不起作用:
if param == Some(par) && value == Some(val) {
//process
}
Run Code Online (Sandbox Code Playgroud)
这个想法是这些值可以被版本访问par并且val就像它们在 …
我想在外部文件中创建和定义静态 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 的定义很长,如果这么大的定义介于其他代码之间,会很混乱。
我想创建一个 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 会自动替换/为\\.
我的问题是,如果可能的话,做这样的事情:
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) 是否有可能通过其头部提交获取 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) 在 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-color的QLineEdit:
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-color的QLineEdit必须是动态的。
我的问题:如何连接QLineEditwith的背景颜色QPalette::base以动态定义 …
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++ 中(double)myInt和之间有区别double(myInt)吗?
c++ ×3
qt ×3
c# ×2
if-statement ×2
casting ×1
definition ×1
git ×1
git-branch ×1
int ×1
object ×1
properties ×1
qpainter ×1
qpalette ×1
qstringlist ×1
rust ×1
vscode-tasks ×1