当我按下一个按钮时,我会弹出一个用户选择的对话框并在结尾处按"确定".我想在这个对话框中有一个分割器.左侧窗格将显示树,右侧将显示其他内容.我该怎么做?
从Qt示例本身:
QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);
Run Code Online (Sandbox Code Playgroud)
因此,在此示例中,创建拆分器时没有任何对话框资源.如果我必须创建这种方式,那就意味着我必须在代码中创建所有控件而不是Qt Creator.
当我需要屏幕上的其他控件时,这样做的正确方法是什么?
我个人使用的一个小实用程序(用C++编写)昨天随机崩溃(我已经使用它大约100多个小时,到目前为止没有问题)虽然我通常不这样做,但我感觉有点喜欢冒险,想尝试更多地了解这个问题.我决定进入事件查看器,看看Windows记录的崩溃事件:
Faulting application StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Faulting module name : StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Exception code : 0xc0000005
Fault offset : 0x0002d160,
Faulting process id: 0x17b4
Faulting application start time: time 0x01ca238d9e6b48b9.
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些东西意味着什么,我将如何使用它们来调试我的程序?这是我目前所知的:异常代码描述了错误,而0xc0000005是内存访问冲突(试图访问它不拥有的内存).我特别想知道更多有关以下内容的信息:
请注意,我主要是一名C++程序员,所以虽然我对汇编有所了解,但我对它的了解非常有限.此外,这确实不是一个需要修复的严重问题(并且鉴于程序的性质也不容易复制),我只是以此为借口来了解这些错误消息的含义.我在网上找到的关于这些崩溃日志的大部分信息通常都是针对最终用户的,所以他们并没有帮助我(作为程序员).
提前致谢
Windows API使用GetLastError()机制来检索有关错误或失败的信息.我正在考虑使用相同的机制来处理错误,因为我正在为专有模块编写API.我的问题是API更好地直接返回错误代码?不会GetLastError()有任何特别的优势?考虑下面的简单Win32 API示例:
HANDLE hFile = CreateFile(sFile,
GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
DWORD lrc = GetLastError();
if (lrc == ERROR_FILE_EXISTS)
{
// msg box and so on
}
}
Run Code Online (Sandbox Code Playgroud)
当我编写自己的API时,我意识到GetLastError()机制意味着CreateFile()必须在所有出口点设置最后一个错误代码.如果有许多退出点并且其中一个可能错过,则这可能会有一点容易出错.愚蠢的问题,但这是如何完成或有某种设计模式呢?
另一种方法是为函数提供一个额外的参数,它可以直接填写错误代码,因此GetLastError()不需要单独的调用.另一种方法可以如下.我将坚持使用上面的Win32 API,这是分析器的好例子.在这里,我将格式更改为此(假设).
result = CreateFile(hFile, sFile,
GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
if (result == SUCCESS)
{
// hFile has correct value, process it
}
else if (result == FILE_ALREADY_EXIT )
{
// display …Run Code Online (Sandbox Code Playgroud) 我想使用std :: string简单地创建一个动态缓冲区,而不是使用索引迭代它.resize()是实际分配缓冲区的唯一函数吗?
我尝试了reserve()但是当我尝试通过索引访问字符串时它断言.此外,当字符串的默认容量似乎是15个字节(在我的情况下),但如果我仍然无法访问它my_string[1].
所以字符串的容量不是实际的缓冲区?reserve()也没有分配实际的缓冲区?
string my_string;
// I want my string to have 20 bytes long buffer
my_string.reserve( 20 );
int i = 0;
for ( parsing_something_else_loop )
{
char ch = <business_logic>;
// store the character in
my_string[i++] = ch; // this crashes
}
Run Code Online (Sandbox Code Playgroud)
如果我做resize()而不是reserve()比它工作正常.字符串是如何容量但却无法使用[]真正访问它?是不是要保留()大小以便你可以访问它?
附加组件 为了回答这些问题,我想问一下stl人们,为什么有人会在resize()完全相同的情况下使用reserve()并且还会初始化字符串?我不得不说我不太欣赏这种情况下的表现论点.所有resize()除了reserve()之外还做了更多的事情,它只是初始化缓冲区,我们知道它总是很好.我们可以在岛上投票保留()吗?
我突然得到这个错误,我不知道为什么.我每次更改代码时都必须重新启动VS2010,因为它显然会锁定pdb文件.
1>LINK : fatal error LNK1201: error writing to program database 'C:\code\MyProject\Debug\MyProject.pdb'; check for insufficient disk space, invalid path, or insufficient privilege
Run Code Online (Sandbox Code Playgroud)
即使我clean是项目,它也不会删除此文件.我曾尝试提出的解决方案在这里由托尼,但它并没有为我工作的.当像他建议的那样添加预构建路径时,我收到以下错误:
1> C:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5):错误MSB3073:命令"C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\freepdb MyProject 1> C:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5):错误MSB3073 :: VCEnd"退出代码9009.
我正在通过VS2010向perforce添加一个项目,但我不断收到'file' not under client's root项目中所有文件的错误.我似乎无法弄清楚这一点.
这是我在做的事情:
1)打开尚未生效的VS2010项目.
2)我选择将solotion添加到perforce(从文件>源代码管理>添加解决方案菜单).
3)我选择了一个新的工作区.它会调出工作区的属性.根文件夹默认为c:\ Users\My.Name.我将其更改为我的项目所在的文件夹.我也改变了视图,因此它指向depot\main \new_project.
它似乎已经添加了项目,但是当我签入文件时它只是不起作用!它为所有文件提供此错误'file not under client's root'.
我也直接去perforce并检查相应工作区的设置.在仪表板中显示错误:
P4V is having trouble translating the location "c:\Users\user.Name\Documents\Code\My_Project" to a valid workspace location. To filter using this location, drag the folder from the workspace tree to the workspace folder field or include the depot location in your workspace view.
Run Code Online (Sandbox Code Playgroud)
有人可以给我任何指针,为什么这不起作用?
更新 我的工作区映射是这样的
Client: omega
Owner: User.Name
Root: C:\Users\User.Name\Documents\Visual Studio 2010\Projects\Omega
LineEnd: local
View:
//depot/main/omega/... //omega/...
Run Code Online (Sandbox Code Playgroud) 我生成一个线程,使用AfxBeginThread它只是一个无限的while循环:
UINT CMyClass::ThreadProc( LPVOID param )
{
while (TRUE)
{
// do stuff
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如何在类析构函数中删除此线程?
我觉得有点像
UINT CMyClass::ThreadProc( LPVOID param )
{
while (m_bKillThread)
{
// do stuff
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
然后设置m_bKillThread要FALSE在析构函数.但是我仍然需要在析构函数中等待,直到线程死亡.
Visual Studio在项目设置中使用了大量宏,这些宏列在此处.我无法找到实际脚本文件中定义的这些宏或标识符的位置(不在项目设置中).
在我的情况下,我试图将项目的输出文件夹更改为解决方案调试或发布文件夹(一级),但在项目设置中更改"输出目录"无效.
在.vcxproj文件中没有提到这些宏,所以我真的不知道它们在哪里定义?我最感兴趣的$(OutDir)是我要更改为解决方案调试/发布文件夹.有谁知道这些定义在哪里?
有时,当一个变量像一个数组或列表这样的对象集合时,它很容易将变量命名为复数.这没关系,还是我们应该总是坚持变量的单数名称?作为一个例子,一系列汽车可称为"汽车"或"汽车"
考虑另一个例子:
vector< string > students; // it is named as students rather singular student
students.push_back("Mark");
students.push_back("Steve");
// lets say we are using index to retrieve it, it does look
// a little clumsy
string current_student = students[0];
Run Code Online (Sandbox Code Playgroud)
或者,我们可以像下面一样将容器对象定义为单数,但它现在看起来像是代表一个对象而不是学生集合?它确实使用索引看起来更好.
vector< string > student;
Run Code Online (Sandbox Code Playgroud)
我个人喜欢的另一个选择是这样的:
vector< string > student_list;
Run Code Online (Sandbox Code Playgroud)
我将'_list'(或可能是骆驼符号)附加到集合变量名称(无论其向量或列表或映射如何).这样,对象的名称是单数的,但它将自身标识为对象的集合.
哪种更好的方式或惯例,以及更具可读性?应该绝对避免多个名字吗?
另外想想另一个更简单的例子,比如我们正在进行一项实验,我们以不同的间隔记录一天100次的温度,因此我们:
float temperatures[100]; // or temperature[100]? or temperature_list[100]?
Run Code Online (Sandbox Code Playgroud)
或者甚至可能是不同的:
float temperature_data[100]?
Run Code Online (Sandbox Code Playgroud) 我在Mac上使用Qt 5.3.2创建了一个全新的QML快速应用程序.当我构建它有2个链接错误.
Run Code Online (Sandbox Code Playgroud)Failed to parse qmlimportscanner output.:-1: error: [iphonesimulator-debug] Error 66
我甚至没有对默认应用程序进行任何更改,为什么我会收到这些错误以及如何解决?
c++ ×8
debugging ×2
mfc ×2
qt ×2
stl ×2
assembly ×1
coding-style ×1
crash ×1
msbuild ×1
parsing ×1
perforce ×1
qml ×1
qsplitter ×1
qt-creator ×1
qt-designer ×1
string ×1
visual-c++ ×1
winapi ×1
windows ×1