小编Ant*_*ton的帖子

Qt信号和插槽对象断开连接?

我想知道如果我破坏信号发射对象,我是否需要断开信号和插槽.这是一个例子:

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的信号,还是会导致内存泄漏或其他一些未定义的行为?

先感谢您.

qt signals-slots

24
推荐指数
1
解决办法
2万
查看次数

我应该在C++中为成员变量和函数参数使用相同的名称

我想知道在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)中,成员变量以不同的颜色显示.这就是为什么似乎没有必要添加任何前缀.

c++ parameters

22
推荐指数
2
解决办法
1万
查看次数

QBoxLayout的所有者是否成为所有布局小部件的所有者?

我在这里看一下这个例子,并想知道是否没有内存泄漏.我有红色的文章谈论删除子喷气机内存泄漏.但是,虽然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)

c++ qt

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

单元测试私有方法是一种好习惯吗?

我想知道单元测试私有方法是否是一个好习惯?

通常只应测试公共接口.

但是,我发现在复杂计算过程中,调用大量不同的私有方法,首先对私有方法进行单元测试更容易,然后对公共接口方法进行简单测试.

举个例子,假设你有一个音频播放器,你有功能:

void play(){ ... }
void pause(){ ... }
void seek(time t)
{
    //All Private methods
    checkIfValidTimeRange(...);
    moveToFilePos(...);    
    fillBuffers(...);      
}
Run Code Online (Sandbox Code Playgroud)

通常我会编写单元测试:checkIfValidTimeRange(...),moveToFilePos(...), fillBuffers(...).

但我不确定这样做是不是很好.

c++ unit-testing private

13
推荐指数
2
解决办法
4363
查看次数

前瞻性声明的缺点是什么?

我想知道在可能的情况下在所有地方使用前向声明是否有任何缺点.这是我的标题只包含声明.

据我所知,使用前向声明可加快编译时间,但我不知道有什么缺点.

例:

啊:

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)

c++ forward-declaration

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

QTextEdit如何将当前选定的文本行保持在屏幕上的相同位置

我希望我的文本光标始终位于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)

并不是说我不能简单地计算行数,因为我有嵌入表格,字体大小也不同.

qt cursor-position qtextedit

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

Hbase搜索部分密钥?

为了更好地说明问题,我将从一个例子开始.可以说,你有3个表:

  • 学生(200万行)
  • TestResults(1亿行)
  • 测试(100 000行).

我们将所有相关数据分组,并添加一个名为"TestSynthesis"的非规范化表,其中包含一个键:TestID_StudentID_TestResultsID.密钥中字段的顺序无关紧要,因为用户需要能够通过该密钥的任何或所有3个部分进行搜索.

一个示例查询将是:"给我所有名字以'John'开头的学生的所有测试结果"

一个简单的解决方案是:

  1. 搜索规范化表格学生
  2. 提取学生ID(假设我们有3个ID:0001000,0000999,0000001)
  3. 然后搜索TestSynthesis这些IDS(如*0001000*,*0000999*,*0000001*)

但是,如果在第2步,我们获得100万行而不是3名学生呢?

HBase只能搜索密钥(例如,不读取数据),还是需要进行全表扫描?

search hbase join key

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

QTextEdit插入和删除行非常慢.无论如何要让它更快?

我在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++ performance qt qtextedit

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