我刚刚开始研究一个新的C++/Qt项目.它将是一个基于MDI的IDE,带有停靠的小部件,用于文件树,对象浏览器,编译器输出等等.但是到目前为止,有一件事让我烦恼:我无法弄清楚如何以编程方式QDockWidget缩小.例如,此代码段创建了我的底部停靠窗口"构建信息":
m_compilerOutput = new QTextEdit;
m_compilerOutput->setReadOnly(true);
dock = new QDockWidget(tr("Build Information"), this);
dock->setWidget(m_compilerOutput);
addDockWidget(Qt::BottomDockWidgetArea, dock);
Run Code Online (Sandbox Code Playgroud)
启动时,我的程序看起来像这样(记住开发的早期阶段):

但是,我希望它看起来像这样:

我似乎无法实现这一点.QDockWidget上的Qt参考说明了这一点:
应在子窗口小部件中实现自定义大小提示,最小和最大大小和大小策略.QDockWidget将尊重它们,调整自己的约束以包含框架和标题.不应在QDockWidget本身上设置大小约束,因为它们会根据是否停靠而更改
现在,这表明执行此操作的一种方法是子类QTextEdit并覆盖该sizeHint()方法.但是,我不想仅仅为此目的这样做,我也没有尝试过它来找到一个有效的解决方案.
我试过打电话dock->resize(m_compilerOutput->width(), m_compilerOutput->minimumHeight()),m_compilerOutput->setSizePolicy()用它的每个选项打电话......到目前为止,没有任何东西影响了它的大小.就像我说的,我更喜欢在几行代码中使用一个简单的解决方案来创建一个只是为了改变的子类sizeHint().所有建议表示赞赏.
我正在试图弄清楚这种设计模式背后的名称.基本上,您有一些需要处理的任意数据,以及任何可能能够处理数据的任意数量的"处理程序"对象.数据将传递给这些处理程序,直到处理它为止.
例如,在Qt中,QImage通过QImageReader读取图像.QImageReader查询QImageIOHandler对象以查看该QImageIOHandler是否可以读取给定的文件格式.如果是这样,它使用该处理程序来读取图像.
这个责任委派有名称吗?
我正在尝试编写一些可移植的C++库代码,这些代码最初将依赖于Boost.Regex,然后在编译器支持时转移到TR1,并在从std :: tr1名称空间移动后最终转到C++ 0x规范到标准 这是我想要对预处理器做什么的一些伪代码:
if( exists(regex) ) // check if I can #include <regex>
{
#include <regex> // per TR1
if( is_namespace(std::tr1) ) // are we on TR1 or C++0x?
{
using std::tr1::regex;
} else
{
using std::regex;
}
} else // fall-back to boost
{
#include <boost/regex.hpp>
using boost::regex;
}
Run Code Online (Sandbox Code Playgroud)
当然,所有这些都需要在预处理器指令中,但如果我知道如何实现,我不会在这里问.:)
我正在从bison的语义值构建我的解析数据结构.一种特殊结构是类型的std::vector<double>.我很好奇野牛内部如何处理移动的语义值.我试着分析c ++.m4文件,发现:
template <typename Base>
inline
void
]b4_parser_class_name[::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move(s);
]b4_variant_if([b4_symbol_variant([this->type_get ()], [value], [move],
[s.value])],
[value = s.value;])[]b4_locations_if([
location = s.location;])[
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法破译这一点,足以说明移动像std :: vector这样的数据结构的效率,部分原因是我对m4语法的无知.
鉴于我的语法:
%define api.token.constructor
%define api.value.type variant
%type < std::vector<double> > numlist
...
numlist:
num { $$ = std::vector<double>(); $$.push_back($1); }
| numlist "," num { $$ = $1; $$.push_back($3); }
;
Run Code Online (Sandbox Code Playgroud)
我不确定性能影响.请注意,这将使用C++ 98编译器而不是C++ 11编译器进行编译; 因此没有移动语义.
我猜这个$$ = std::vector<double>()陈述可以删除; 我认为它已经默认构建,但我没有测试过,我不确定野牛的内部变体类型是如何工作的.我特别感兴趣的是是否$$ = $1; $$.push_back($3);会为每个要添加的项目复制向量?
我无法确定这是否是将类型切换为的情况std::vector<double> *; 不可否认,使用bison的变体类型背后的大部分原因是使用普通的C++类型而不是指针的联合. …
我不是网络开发人员。我再说一遍,我不是 Web 开发人员。我刚刚开始进入 npm、JS、TS、React 等的世界,来自一个非常面向移动/桌面的背景。请以巴尼式的方式简化任何答案,以承认这一点。
我试图让微软的摩纳哥编辑器在工作电子与做出反应,利用电子锻造。但是,我不明白我收到的错误。我已经阅读了一些关于 Microsoft 执行某些 AMD 加载问题的非标准方式的问题,人们多年来一直遇到问题。我无法根据我的发现确定解决方案。我找到的最接近的 SO 帖子没有答案。我为Ace Editor尝试了相同的过程,并且效果很好;但是,如果可能的话,我强烈希望在我的应用程序中使用 Monaco 编辑器。
$ electron-forge init electron-monaco-test --template=react
$ cd electron-monaco-test
$ yarn add react-monaco-editor
Run Code Online (Sandbox Code Playgroud)
然后我将src/app.jsx编辑为:
import React from 'react';
import MonacoEditor from 'react-monaco-editor';
export default class App extends React.Component {
render() {
return <MonacoEditor language='javascript' />;
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写PCLMULQDQ 优化的 CRC-32实现。特定的 CRC-32 变体适用于我不拥有的变体,但我试图以库形式提供支持。在crcany模型形式中,它具有以下参数:
\nwidth=32 poly=0xaf init=0xffffffff refin=false refout=false xorout=0x00000000 check=0xa5fd3138\n(省略了我认为是0x00000000但老实说不知道它是什么的残留物)
该算法的基本非基于表/按位实现(由 生成crcany)是:
uint32_t crc32byond_bit(uint32_t crc, void const *mem, size_t len) {\n unsigned char const *data = mem;\n if (data == NULL)\n return 0xffffffff;\n for (size_t i = 0; i < len; i++) {\n crc ^= (uint32_t)data[i] << 24;\n for (unsigned k = 0; k < 8; k++) {\n crc = crc & 0x80000000 ? (crc << …Run Code Online (Sandbox Code Playgroud) 我正在为基于PNG的图像格式编写C++库.对我来说,一个停止点是我不确定我应该如何在内存中布置像素数据; 据我所知,有两种实用方法:
PNG(libpng)的标准参考实现使用上面的方法2,而我已经看到其他人使用方法1.是一个比另一个更好,或者每个方法都有自己的优点和缺点,必须妥协被制作?此外,大多数图形显示系统使用哪种格式(可能是为了便于将我的库输出用于其他API)?