我在QPainter上的Qt程序中绘制了文本和各种元素.我需要得到这个文本占用的像素大小.
知道文本字符串和字体,我能以某种方式获得像素大小吗?
谢谢.
如何最好在C++中设置编码?
我习惯了使用Unicode(和工作wchar_t,wstring,wcin,wcout和L "...").我还以UTF-8保存了源代码.
目前我使用MinGW(Windows 7)并在Windows控制台(cmd.exe)中运行我的程序,但有时我可以在GNU\Linux上使用gcc并在Linux控制台中使用UTF-8编码运行promgram.
在任何时候我都希望在Windows和Linux上编译我的源代码,我希望所有的Unicode符号都被正确地输入和输出.
当我遇到编码的下一个问题时,我用Google搜索.此外,我发现的最不同的委员会:setlocale(LC_ALL, "")和setlocale(LC_ALL, "xx_XX.UTF-8"),std::setlocale(LC_ALL, "")并std::setlocale(LC_ALL, "xx_XX.UTF-8")从<clocale>,
SetConsoleCP()而SetConsoleOutputCP()从<windows.h>和许多其他人.
最后我被这种萨满教所困扰,我想问你:如何建立编码是正确的?
我使用lxml在Python中编写了一个小的html解析器。这很有用,但是我有一个问题。
我有以下代码:
tags = doc.xpath('//table//tr/td[@align="right"]/b')
for tag in tags:
print(x.text.strip())
Run Code Online (Sandbox Code Playgroud)
工作正常。但是,如果元素<br>内有标签<b>,如下所示:
<b> first-half <br>
second-half </b>
Run Code Online (Sandbox Code Playgroud)
此代码只会打印first-half到<b>标签中。
<b>即使有<br>标签,如何获取所有文本?
谢谢。
我的代码中有一个宽字符串(std :: wstring),我需要在其中搜索宽字符.
我使用find()函数:
wcin >> str;
wcout << ((str.find(L'?') != wstring::npos)? L"EXIST":L"NONE");
Run Code Online (Sandbox Code Playgroud)
L'?' 是一封西里尔字母.
但是同一个调用中的find()总会返回npos.在拉丁字母的情况下,find()可以正常工作.
这是这个功能的问题吗?或者我做错了什么?
UPD
我使用MinGW并以UTF-8保存源代码.我也设置了语言环境setlocale(LC_ALL, "");.代码相同的wcout << L'?';工作是coorectly.但同样的
wchar_t w;
wcin >> w;
wcout << w;
Run Code Online (Sandbox Code Playgroud)
工作不正确.
它很奇怪.之前我使用setlocale()编码没有问题.
我正在寻找一个简单的python库,用于从图像中识别文本.图像类似于:

图像包含非常纯粹和简单的 - 一行,数字和连字符,但分辨率很低.
我想要类似的东西(理想中):
text = recognize(open('image.png', 'rb').read())
Run Code Online (Sandbox Code Playgroud)
有类似的东西吗?谢谢.
UPD
我知道pytesser和OCRopus.但据我所知,他们不支持Python 3.x.
请解释一下,为什么match()只返回一个匹配,而不是四个(例如):
s = 'aaaa'
p /a/.match(s).to_a # => ["a"]
Run Code Online (Sandbox Code Playgroud)
奇怪的是,分组match()返回两个匹配,独立于真实匹配计数:
s = 'aaaa'
p /(a)/.match(s).to_a # => ["a", "a"]
s = 'a aaa a'
p /(a)/.match(s).to_a # => ["a", "a"]
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答.
我需要在包含wchar_t的c-string的C++程序向量中使用.我试着这样做:
using std::vector;
vector<wchar_t[SIZE]> string_list(100);
Run Code Online (Sandbox Code Playgroud)
但我得到包含以下单词的大错误输出:
error: functional cast to array type «std::vector<wchar_t [512]>::value_type {aka wchar_t [512]}»
Run Code Online (Sandbox Code Playgroud)
我做错了什么?为什么我会收到这样的错误
我想获取现在在VLC中打开的文件的全名。
我只发现了这一点:
tell application "VLC"
set current_file to name of first window
end tell
Run Code Online (Sandbox Code Playgroud)
但是它将返回current_file当前窗口的标题,该标题只是没有扩展名的文件名。而我需要一条完整的道路。
我能做得到吗?
谢谢。
请帮助找到此功能中的错误.
wchar_t* clean(wchar_t out[], const wchar_t in[])
{
int n = wcslen(in);
wchar_t *str = new wchar_t[n];
wcscpy(str, in);
out[0] = L'\0';
wchar_t *state;
wchar_t *word = wcstok(str, L" ", &state);
while (NULL != word) {
if (wcslen(word) > 1) {
wcscat(out, word);
wcscat(out, L" ");
}
word = wcstok(NULL, L" ", &state);
}
delete state;
delete[] str;
return out;
}
Run Code Online (Sandbox Code Playgroud)
此函数从原始字符串单词获取并将它们放在结果字符串中.除了函数忽略多个空格和单个字母的单词.
不幸的是,该程序落在这个函数的最后几行有相同的错误(linux-3.7,gcc-4.7):
*** Error in `./a.out': free(): invalid next size (fast): 0x08610338 ***
Run Code Online (Sandbox Code Playgroud)
请问,我错了什么?