小编gir*_*fee的帖子

带有 QGridLayout 的 QDockWidget - 布局内的小部件未与顶部对齐

我正在尝试创建一个可停靠工具栏(类似于您在 Photoshop 中使用的工具栏),其中包含 2 x (n) 的按钮网格。我的想法是使用以空白 QWidget 为父级的 QGridLayout,将其添加到 QDockWidget,并将按钮添加到 QGridLayout。除了对齐之外,这似乎有效。

我已经设置了按钮的对齐方式...

myLayout->addWidget(button1,0,0,1,1,Qt::AlignTop);
myLayout->addWidget(button2,0,1,1,1,Qt::AlignTop);
myLayout->addWidget(button3,1,0,1,1,Qt::AlignTop);
myLayout->addWidget(button4,1,1,1,1,Qt::AlignTop);
Run Code Online (Sandbox Code Playgroud)

...但是网格正在扩展到 QDockWidget 的整个高度,如下所示: 在此输入图像描述

按钮也水平扩展,以填充整个空间。我想我可以限制水平调整大小的能力(如果可能的话?)。

我在文档中忽略了一个函数来更好地控制 GridLayout 来限制它填充父小部件的整个宽度/高度吗?作为一个附带问题,有没有办法防止 QDOckWidget 在某个方向上调整大小?

qt dock toolbar qdockwidget qgridlayout

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

转移QImage/QPixmap的色调

我想这通常是一个图形处理问题,但我想在Qt(c ++)中实现这一点.如果我有一个图像 - 让我们在透明背景上说一个圆圈 - 浅灰色,Qt中是否有任何内置功能可以将色调/饱和度转换为颜色?

我想我可以逐像素地进行,并在数学上修改rgb - 将x添加到r,g和b,以获得所需的颜色,但必须有一种比修改每个像素更好的方法.

Qt Docs中的任何内容都没有进入图像处理,只是改变了alpha和颜色.我应该查看一个开源库(最终结果可能是一个独立销售的软件)?如果是的话,有什么建议吗?或者是否有一个隐藏在Qt文档中的秘密函数可以在不需要外部库/疯狂算法的情况下完成?

graphics qt qpixmap qimage

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

如何允许QWidget扩展到QTabWidget中的整个选项卡?

在布局和尺寸政策方面,我从来都不是太棒了,所以这可能是一个简单的答案,但是这里有.

当我向QTabWIdget添加新选项卡并将窗口小部件设置为QSplitter时,拆分器将使用给定的整个空间量.但是,当我在QWidget中放置QSplitter并使用QWidget添加选项卡时,它不会使用给定空间 - 只有分割器大小.

我想远离QLayout,因为我在分割器中拥有所有必要的小部件.只需让我的QWidget使用选项卡中的所有空间(这应该允许QSplitter使用QWIdget中的所有空间)就是我所需要的.

我在下面构建了一个示例,显示了比较以及结果.长问题简短 - 如何让方案一(在"选项卡一"中)看起来像方案二("选项卡二")并仍然使用父级QWidget进行Spliiter?

ui->setupUi(this);
QTabWidget* pTab = new QTabWidget(this);
this->setCentralWidget(pTab);

//Splitter belongs to a QWidget, which belongs to the Tab. Does not use all space
QWidget* pWidget = new QWidget(this);
QSplitter* pSplitter = new QSplitter(pWidget);

QListWidget* pList = new QListWidget(this);
QListWidget* pList2 = new QListWidget(this);
pSplitter->addWidget(pList);
pSplitter->addWidget(pList2);
pTab->addTab(pWidget, "Tab One");

//Splitter belongs to the Tab. Uses all space
QListWidget* pList3 = new QListWidget(this);
QListWidget* pList4 = new QListWidget(this);

QSplitter* pSplitter2 = new QSplitter(this);
pSplitter2->addWidget(pList3);
pSplitter2->addWidget(pList4); …
Run Code Online (Sandbox Code Playgroud)

user-interface qt tabs resize qsplitter

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

检查非托管线程中的托管异常

我正在研究一个小型转储文件,其中主线程(c ++)利用CLR启动托管(C#.NET)窗口,在托管部分抛出异常,并使应用程序崩溃.我一直在寻找技术来检查线索的异常细节,但是它们主要用于一个或另一个(完全不受管理的堆栈和线程或完全托管的堆栈和线程).

托管callstack的部分在下面,我可以看到.NET部分内部引发了一个异常,但我不确定一种方法来深入查看所引发内容的细节.我仍然很擅长挖掘.dmp文件,因此非常感谢任何指导.

001ddb04 68b92a42 KERNELBASE!RaiseException+0x58
001ddba8 68c655ef clr!RaiseTheExceptionInternalOnly+0x276
001ddbd8 68c6de52 clr!UnwindAndContinueRethrowHelperAfterCatch+0x83
001ddc6c 627528df clr!CEEInfo::resolveToken+0x59b
001ddc7c 62778872 clrjit!Compiler::impResolveToken+0x3a
001de3ac 62751d53 clrjit!Compiler::impImportBlockCode+0x29b3
001de42c 62751f48 clrjit!Compiler::impImportBlock+0x5f
001de444 62753405 clrjit!Compiler::impImport+0x235
001de464 62753635 clrjit!Compiler::compCompile+0x63
001de4a0 62753823 clrjit!Compiler::compCompileHelper+0x2fa
001de518 627536f6 clrjit!Compiler::compCompile+0x213
001de608 6275385f clrjit!jitNativeCode+0x1e3
001de62c 68a74710 clrjit!CILJit::compileMethod+0x25
001de67c 68a747a9 clr!invokeCompileMethodHelper+0x41
001de6bc 68a747eb clr!invokeCompileMethod+0x31
001de720 68a73684 clr!CallCompileMethodWithSEHWrapper+0x2a
001deab8 68a73920 clr!UnsafeJitFunction+0x3ca
001deb94 68a81e5e clr!MethodDesc::MakeJitWorker+0x36b
001dec08 68a550b6 clr!MethodDesc::DoPrestub+0x59d
001dec70 68a44279 clr!PreStubWorker+0xed
001deca0 16c5185a clr!ThePreStub+0x16
001deda4 5ae8f887 0x16c5185a
001dedc0 5ae20c9c MYDLL!CLoader::InvokeCSharpControl
Run Code Online (Sandbox Code Playgroud)

c# c++ windbg exception crash-dumps

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

PHP加密/解密添加填充字符

我正在尝试创建一个简单的加密类,但结果字符串用非ascii字符填充.我已经尝试过rtrim(),转换为utf8等,如其他一些答案所述.我到底错过了什么?以下是将结果粘贴到Notepad ++中时出现的字符

在此输入图像描述

包含此处字符的Pastebin .在html中显示为't',但将其复制到记事本中会显示其后的数据的随机位.

class Crypter implements ICrypter {

private $Key;
private $Algo;

public function __construct($Algo = MCRYPT_BLOWFISH) {

    $this->Key = substr('key', 0, mcrypt_get_key_size($Algo, MCRYPT_MODE_ECB));
    $this->Algo = $Algo;

}

public function Encrypt($data) {

    //$iv_size = mcrypt_get_iv_size($this->Algo, MCRYPT_MODE_ECB);
    //$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

    $blocksize = mcrypt_get_block_size('blowfish', 'ecb'); // get block size
    $pkcs = $blocksize - (strlen($data) % $blocksize); // get pkcs5 pad length
    $data.= str_repeat(chr($pkcs), $pkcs); // append pkcs5 padding to the data


    $crypt = mcrypt_encrypt($this->Algo, $this->Key, $data, MCRYPT_MODE_ECB);
    return …
Run Code Online (Sandbox Code Playgroud)

php encryption blowfish character-encoding password-encryption

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