小编Tha*_*lia的帖子

如何画笔宽度为0(隐形不是化妆品)?

我想绘制具有各种宽度边框的形状.

如果我设置width = 0,我希望(想象)这里没有边框......但我读到边框0非常薄("化妆品")边框.

如何用隐形边框绘制形状?

int penWidth = 0; // some user input, 0 to 20 maybe
QPen pen = QPen(Qt::red, penWidth, Qt::PenStyle(Qt::SolidLine));
painter->setPen(pen);
painter->setBrush(QBrush(Qt::SolidPattern));
painter->drawRect(someRect);
Run Code Online (Sandbox Code Playgroud)

c++ qt drawing

7
推荐指数
1
解决办法
1718
查看次数

如何正确检查对象是否实现了接口

我想为某些对象实现自定义行为.

为此,让我的项目(继承自QGraphicsItem)实现一些接口.

class SomeParentItem 
{ 
    SomeParentItem(bool x) { x = true; } 
    void function1() {}
};
class SomeInterface
{
    virtual void function2() = 0;
};
class XYZItem : public QGraphicsXYZItem, public SomeParentItem, public SomeInterface
{
    XYZItem(bool x):SomeParentItem(x) {}
    virtual void function2() { x = false; }
};
class MPQItem : public QGraphicsMPQItem, public SomeParentItem
{
    MPQItem (bool x):SomeParentItem(x) {}
};
Run Code Online (Sandbox Code Playgroud)

从外面看,我以为我就是这么做的

SomeInterface* item1 = dynamic_cast<SomeInterface*>(item);
if(item1 == NULL)
    item->function1(); 
else
    item1->function2();  
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会崩溃...通常......所以我正在创建一个标志来测试,如果标志是真的,那么只有敢于施放.

但我一直在想,它不应该崩溃.所以我勇敢再次尝试,这次是在一个QWidget孩子.而不是崩溃我得到了

QWidget::insertAction: Attempt to insert null action
Run Code Online (Sandbox Code Playgroud)

这是 …

c++ inheritance qt multiple-inheritance

7
推荐指数
1
解决办法
1401
查看次数

从Google Test获取TeamCity中的XML报告

我试图找出如何使用Google Test运行单元测试,并将结果发送到TeamCity.

我已经运行了测试,并使用命令行参数将结果输出到xml --gtest_output="xml:test_results.xml".

我想在TeamCity中读取这个xml.我没有看到如何 在构建/运行期间将XML报告传递给TeamCity ...

除了通过XML报告处理:

我添加了XML Report Processing,添加了Google Test,然后......它要求我指定监控规则,并添加了xml文件的路径......我不明白监控规则是什么,或者如何创建它们. ..

[尽管如此,我在生成的xml中看不到任何地方,它打算与TeamCity交谈...]

在日志中,我有:

Google Test report watcher
[13:06:03][Google Test report watcher] No reports found for paths:
[13:06:03][Google Test report watcher] C:\path\test_results.xml
[13:06:03]Publishing internal artifacts
Run Code Online (Sandbox Code Playgroud)

当然,没有报告结果.

任何人都可以指导我以正确的方式将xml测试结果文件导入TeamCity吗?非常感谢 !

编辑:XML报表处理是否可能只处理在构建期间创建的报表?(谷歌测试没有做什么?)并忽略了以前生成的报告,"过时",只是说它找不到它们 - 或者格式错误,或者......但是我应该阅读上面的消息?

teamcity googletest

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

设置cv :: Mat的深度

我想测试一个寻找特定垫深度和通道数的函数

它有一个测试......

if (image.channels() == 1 && image.depth() == 8) ...
else if (image.channels() == 1 && image.depth() == 16)  ...
else if (image.channels() == 1 && image.depth() == 32)  ...
else
{  
  if ((image.channels() != 3) || (image.depth() != 8)) 
  {printf("Expecting rgb24 input image"); return false;}
  ...
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢用化妆垫进行测试,以避免使用本地资源:

cv::Mat M(255, 255, CV_8UC3, cv::Scalar(0,0,255));
printf("M: %d %d \n", M.channels(), M.depth());
cv::Mat M1(255, 255, CV_32F, cv::Scalar(0,0,255));
cv::Mat M2(255, 255, CV_32FC3, cv::Scalar(0,0,255));
cv::Mat M2(255, 255, CV_8SC3, cv::Scalar(0,0,255));
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种组合,但如果我打印,我得到0深度.

我也尝试加载一个png或一个jpg文件 - 结果相同(我不喜欢使用外部文件......但我看不出为什么这不起作用) …

c++ opencv

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

使用opencv复制/混合不同大小的图像

我试图混合两个图像.如果它们具有相同的大小,则很容易,但如果其中一个图像更小或更大,则cv :: addWeighted失败.

图像A(预计会更大)图像B(预计会更小)

我试图创建一个ROI - 尝试创建一个大小为A的第三个图像并将B复制到其中 - 我似乎无法正确使用它.请帮忙.

double alpha = 0.7; // something
int min_x = ( A.cols - B.cols)/2 );
int min_y = ( A.rows - B.rows)/2 );
int width, height;
if(min_x < 0) {
  min_x = 0; width = (*input_images).at(0).cols - 1;
}
else         width = (*input_images).at(1).cols - 1;
if(min_y < 0) {
  min_y = 0; height = (*input_images).at(0).rows - 1;
}
else         height = (*input_images).at(1).rows - 1;
cv::Rect roi = cv::Rect(min_x, min_y, width, height);            
cv::Mat …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing

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

调整和旋转QGraphicsItem会导致奇怪的形状

我无法理解如何应用缩放和旋转QGraphicsItem.

我需要能够应用旋转和缩放(不一定保持纵横比),我得到完全意想不到的结果.

旋转必须在项目中心周围.我似乎没有问题 - 但如果我尝试调试边界矩形,我看似错误的值.

如果我不保持纵横比,而不是旋转,我得到一个非常奇怪的偏斜,我一直在努力寻找原因并纠正它.我希望任何人都能找到解决方案.

对于许多项目 - 比如矩形 - 我的解决方案是放弃调整大小 - 只需用给定大小的新项目替换项目. 我甚至为pixmap做了这个(尽管它可能会影响性能).
但我不知道如何为文本或其他一些类型(svg ...)做到这一点.
我试图了解如何应用缩放,旋转项目,以及如何正确应用它.

下面的代码是一个实验,我可以缩放和旋转文本项目,结果...参见附图

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsTextItem>

void experimentScaling(QGraphicsScene* s)
{
    QGraphicsTextItem* ref = new QGraphicsTextItem();  // a reference, not resized
    ref->setPlainText("hello world");
    s->addItem(ref);
    ref->setDefaultTextColor(Qt::red);
    ref->setRotation(45);

    QGraphicsTextItem* t = new QGraphicsTextItem();    // text item to be experimented on
    t->setPlainText("hello world");
    s->addItem(t);

    QTransform transform;                    // scale
    transform.scale(10, 1);
    t->setTransform(transform);
    t->update();

    QPointF _center = t->boundingRect().center();
    qDebug("%f %f %f %f", t->boundingRect().left(), …
Run Code Online (Sandbox Code Playgroud)

qt resize transformation rotation qgraphicsitem

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

设置QGraphicsTextItem文本内容的精确高度和宽度

我需要创建具有文本内容的确切宽度和高度的文本项.
文本的高度是最重要的要求.
文本的位置应该与文本本身相关.

我还必须能够将它放在画布上的确切位置.

假设一个(可打印的)画布(在一个更大的画布上QGraphicsScene),比如5英寸宽和1英寸高,我的文字应该能够从上下左右拉伸 - 并且放在画布上,而不是部分画出.


我正在QGraphicsTextItem为我的项目类型进行子类化.我正在调整大小,使用QTransform()所需的大小 - 以英寸或毫米或像素(72*英寸)为单位.
同时将document()边距设置为0,内部的任何内容(如QTextBlockFormat边距)也设置为0.

我已经实现了setItemSize(QSizeF sz)(以像素为单位的sz),QGraphicsTextItem根据需要调整大小.
使用项目边界rect初始化sz.
假设没有换行,单行文本(解决此问题后可以单独解决多行).

将项目添加到画布时,我仍然会看到顶部和底部边距 - 这会根据字体选择而有所不同.
我在项目周围画了一个矩形来看它.
顶部/底部距离取决于字体选择.


我曾尝试使用字体指标来确定这些距离(paint()我在绘制线条时试图确定文本适合的位置和矩形).

我很乐意至少能够确定用于大写字母,没有重音符号或特殊字符字体的正确大小(这将是一个开始,但自然我需要能够使用任何字符).
但至少有一些方法可以确定文本内容的大小和位置(相对于项目的(0,0)),即使在最简单的情况下......

字体度量tightBoundingRect()似乎是最准确的大小,但似乎无法确定其位置,以便我可以以某种方式正确创建我的项目,并可能正确调整大小/移动它们以适应画布.


以下是我努力确定至少相对于项目的(0,0)的文本的确切大小和位置的一些示例(假设一旦我这样做,我能够将该信息暴露给外部或包括班次在项目转换调整大小).
请注意,字体度量标注的文本大小并不总是覆盖文本,对于不同的字体,我无法在文本本身周围放置紧束缚矩形(洋红色).(我做了多次猜测,下面的代码只有一个 - 这些行试图显示不同的字体指标大小).

在此输入图像描述

以上是继承文本项的绘画功能的实验QGraphicsTextItem:

void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
    // draw text
    QGraphicsTextItem::paint(painter, option, widget);

    QPen p;
    p.setWidthF(0);
    QFontMetricsF fm(this->font());
    qreal ascent = fm.ascent(),
          descent = fm.descent(), …
Run Code Online (Sandbox Code Playgroud)

qt qtextdocument qgraphicstextitem

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

调整QGroupBox中的标题位置(使用样式表)

我想设计一个QGroupBox符合某些设计要求的样式:

在此输入图像描述

注意 - 顶部的组标题应位于左侧,但应超过框曲率.

使用以下样式表,我得到下面的图像(如果我删除单词"left",则为第二个图像):

QGroupBox {
    font: bold; 
    border: 1px solid silver;
    border-radius: 6px;
    margin-top: 6px;
}
QGroupBox::title {
    subcontrol-origin:  margin;
    subcontrol-position: top left;    // for second image:  top; 
    padding: 0 2px 0 2px;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

所以,看起来我想要的subcontrol-position: top left;只是增加了偏移量.我找不到任何地方.

添加填充会删除该行,因此它不是我想要的.

我刚才找到了一个选项 - 一个不同的选项subcontrol-origin::

QGroupBox::title {
    subcontrol-origin:  padding;
    subcontrol-position: top left; 
    padding: -16 12px 0 12px;
}
Run Code Online (Sandbox Code Playgroud)

它看起来几乎是正确的 - 但边界现在切入标题.

在此输入图像描述

如何移动组合框的标题,使其仍然在左侧但是超过框曲率,并且曲率保持可见,例如在设计中?

qt qtstylesheets qgroupbox

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

如何使用调试符号构建openssl?[add libeay.pdb]

我正在使用openssl,在构建期间我收到了很多关于缺少libeay.pdb的警告.有人可以建议如何添加它吗?


build.cmd看起来像这样(我认为重要的部分):

...
perl util\mk1mf.pl debug dll no-asm VC-WIN64A >ms\ntdll64.dbg.mak
perl util\mkdef.pl 32 libeay > ms\libeay32.def
nmake -f ms/nt64.dbg.mak
Run Code Online (Sandbox Code Playgroud)

我读了INSTALL.W32,上面写着"如果你使用平台debug-VC-WIN32而不是VC-WIN32,那么将编译调试符号." 我试图用debug-WIN64A替换VC-WIN64A(与32相同),并且构建给了我一个错误

Unknown option --debug-VC-WIN64A
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:当我在mak之后添加/ DEBUG
再次编辑时它起作用:/ DEBUG不是必需的,命令中的调试字完成了工作.
如何使用Visual Studio构建它?

c++ openssl build pdb

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

Mac上的Qt Assistant窗口在调用者窗口后面启动

我正在运行启动流程的Qt应用程序(Qt助手)

当应用程序在OSX上运行时,进程窗口显示在调用者窗口后面...

我怎么能把它带到前面?

Qt文档中的代码:

QProcess *process = new QProcess();
QStringList args;
args << QLatin1String("-collectionFile")
     << QLatin1String("mycollection.qhc");
     //<< QLatin1String("-enableRemoteControl");  // can't use this, help freezes... but still starts in background! ... this is apparently a bug in Qt solved in Qt 5.4 (see Note) which I cannot use, but not relevant for current problem 
process->start(QLatin1String("Assistant.app"), args);
if (!process->waitForStarted())
    return;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

关于不使用"-enableRemoteControl"的注意事项 - 请参阅问题

标记为重复/投票的闭合点指向以分离方式启动进程的示例.尝试它并没有解决问题 - 此外,帮助必须是应用程序的子进程.

根据评论/发布的答案更新:

QString app = "path/to/Assistant";   // since I use the copy from inside …
Run Code Online (Sandbox Code Playgroud)

c++ macos qt process foreground

5
推荐指数
0
解决办法
313
查看次数