我想知道如果我破坏信号发射对象,我是否需要断开信号和插槽.这是一个例子:
QAudioOutput * audioOutput = new QAudioOutput(format,mainWindow);
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State)));
delete audioOutput;
audioOutput = new QAudioOutput(format,mainWindow);
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State)));
Run Code Online (Sandbox Code Playgroud)
这会自动断开旧audioOutput的信号,还是会导致内存泄漏或其他一些未定义的行为?
先感谢您.
我想知道在C++中为成员变量和函数参数使用相同的名称是否是一个好习惯.我来自Java背景,这很常见.我想知道在C++中是否有缺点做以下(代码工作):
class Player
{
public:
void setState(PlayerState *state)
{
this->state = state;
}
private:
PlayerState *state;
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的答案.据我了解,虽然它有效,但更好的做法是使用某种标记来区分成员变量和函数参数,例如:
_ or m_
Run Code Online (Sandbox Code Playgroud)
在某些编辑器(如Qt Designer)中,成员变量以不同的颜色显示.这就是为什么似乎没有必要添加任何前缀.
我在这里看一下这个例子,并想知道是否没有内存泄漏.我有红色的文章谈论删除子喷气机内存泄漏.但是,虽然QWidgets确实保留了添加到其中的窗口小部件的所有权,但布局却没有.
从QT代码看,具有布局的父级获得了此布局的所有小部件的所有权.但是我在文档中看不到任何这方面的参考.
Window::Window()
{
editor = new QTextEdit();
QPushButton *sendButton = new QPushButton(tr("&Send message"));
connect(sendButton, SIGNAL(clicked()), this, SLOT(sendMessage()));
QHBoxLayout *buttonLayout = new QHBoxLayout();
buttonLayout->addStretch();
buttonLayout->addWidget(sendButton);
buttonLayout->addStretch();
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(editor);
layout->addLayout(buttonLayout);
setWindowTitle(tr("Custom Type Sending"));
}
Run Code Online (Sandbox Code Playgroud) 我想知道单元测试私有方法是否是一个好习惯?
通常只应测试公共接口.
但是,我发现在复杂计算过程中,调用大量不同的私有方法,首先对私有方法进行单元测试更容易,然后对公共接口方法进行简单测试.
举个例子,假设你有一个音频播放器,你有功能:
void play(){ ... }
void pause(){ ... }
void seek(time t)
{
//All Private methods
checkIfValidTimeRange(...);
moveToFilePos(...);
fillBuffers(...);
}
Run Code Online (Sandbox Code Playgroud)
通常我会编写单元测试:checkIfValidTimeRange(...)
,moveToFilePos(...)
, fillBuffers(...)
.
但我不确定这样做是不是很好.
我想知道在可能的情况下在所有地方使用前向声明是否有任何缺点.这是我的标题只包含声明.
据我所知,使用前向声明可加快编译时间,但我不知道有什么缺点.
啊:
Class A
{
};
Run Code Online (Sandbox Code Playgroud)
BH:
// Should I use and include "a.h" in the cpp file (e.g., a.cpp)
Class A;
Class B
{
doSomething(A *a);
A *myA;
};
Run Code Online (Sandbox Code Playgroud)
或者它是否更好用
BH:
#include "a.h"
Class B
{
doSomething(A *a);
A *myA;
};
Run Code Online (Sandbox Code Playgroud) 我希望我的文本光标始终位于QTextEdit的相同垂直位置.
举个例子,我说(*I*= cursor,====分隔编辑框).可以说*I*距离顶部20像素.
============================================
Today is a nice weather
I wanted to go *I*for a walk.
But finaly got caught in a rain.
============================================
Run Code Online (Sandbox Code Playgroud)
现在,如果我将光标向下移动.
============================================
I wanted to go for a walk.
But finaly got *I*caught in a rain.
Damn it.
============================================
Run Code Online (Sandbox Code Playgroud)
并不是说我不能简单地计算行数,因为我有嵌入表格,字体大小也不同.
为了更好地说明问题,我将从一个例子开始.可以说,你有3个表:
我们将所有相关数据分组,并添加一个名为"TestSynthesis"的非规范化表,其中包含一个键:TestID_StudentID_TestResultsID.密钥中字段的顺序无关紧要,因为用户需要能够通过该密钥的任何或所有3个部分进行搜索.
一个示例查询将是:"给我所有名字以'John'开头的学生的所有测试结果"
一个简单的解决方案是:
但是,如果在第2步,我们获得100万行而不是3名学生呢?
HBase只能搜索密钥(例如,不读取数据),还是需要进行全表扫描?
我在QTextEdit对象中有一个包含50行的表.逐行删除50行,然后逐行添加50行需要大约1-2秒.
有没有办法加快这个操作.
我只需要看到最终的结果.(即在我完成删除然后添加行之后).
因为我知道究竟什么需要时间我找不到一个解决方法.
这是一些简单的代码来测试它:
//ui->textEdit is the text edit control
//This will insert 500 rows then remove 499 rows.
QTextCursor textCursor = ui->textEdit->textCursor();
textCursor.setPosition(1);
if(textCursor.currentTable() !=0)
{
for(int i =0;i<500;i++)
{
textCursor.currentTable()->insertRows(1,1);
}
for(int i =0;i<499;i++)
{
textCursor.currentTable()->removeRows(1,1);
}
}
Run Code Online (Sandbox Code Playgroud) c++ ×5
qt ×4
qtextedit ×2
hbase ×1
join ×1
key ×1
parameters ×1
performance ×1
private ×1
search ×1
unit-testing ×1