小编Jac*_*ieg的帖子

Qt对象的Qt内存管理

我知道有很多关于qt内存管理的问题,但我找不到我的答案.

因此对于qt小部件,如果在创建对象时将此传递(父小部件)作为参数传递,则父小部件将获取它的所有权并在父级死亡时将其删除.将小部件添加到布局并在小部件上设置该布局时,会发生同样的情况.

但是,如果我声明一个指向QColor对象的指针,会发生什么?QColor无法作为其他窗口小部件的子窗口添加,也无法添加到布局中.当窗口小部件死亡或我需要在析构函数中手动删除内存时,是否会释放内存?

这里有一个例子......当Widget被销毁时,m_pColor会发生什么?它会被破坏还是会有内存泄漏?对不起代码中的任何错误,我没有编译它,我只是在这里写的例子.

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QHBoxLayout;
class QPushButton;
class QColor;

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget( QWidget *parent = NULL );

public:
    QHBoxLayout *m_pLayout;
    QPushButton *m_pButton;
    QColor *m_pColor;
};

#endif // WIDGET_H
Run Code Online (Sandbox Code Playgroud)
#include "widget.h"

#include <QHBoxLayout>
#include <QPushButton>
#include <QColor>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_pLayout = new QHBoxLayout;
    m_pButton = new QPushButton( tr( "Button" ) );
    m_pLayout->addWidget( m_pButton );

    m_pColor = new QColor(0, 0, 0, 255);

    setLayout( m_pLayout );
}
Run Code Online (Sandbox Code Playgroud)

qt memory-leaks memory-management

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

将指向函数的指针分配给指向函数对象的指针的地址

在C++中有可能吗?例如,我有一个指向函数的指针,该函数不带参数,返回类型为void:

void (*f)();
Run Code Online (Sandbox Code Playgroud)

和一个函数对象:

class A
{
public:
    void operator()() { cout << "functor\n"; }
};
Run Code Online (Sandbox Code Playgroud)

是否可以分配给对象f的地址A?当我打电话f()A探险家时?

我试过这个,但它不起作用:

#include <iostream>
using namespace std;

class A
{
public:
    void operator()() { cout << "functorA\n"; }
};

int main()
{
    A ob;
    ob();
    void (*f)();
    f = &ob;
    f();       // Call ob();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我明白了 C:\Users\iuliuh\QtTests\functor_test\main.cpp:15: error: C2440: '=' : cannot convert from 'A *' to 'void (__cdecl *)(void)' There is no context …

c++ pointers function-pointers functor

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

缺少XAMPP mysql.sock

我按照以下说明从apachefriends.org安装了XAMPP:http://www.apachefriends.org/en/xampp-linux.html#377.

问题是缺少文件/opt/lampp/var/mysql/mysql.sock.我怎么能得到这个文件?事情是我想运行一个简单的MySQL命令学习工具,我得到这个文件丢失的错误.(警告:PDO :: __ construct()[pdo .-- construct]:[2002]在/ opt中没有这样的文件或目录(尝试通过unix:///opt/lampp/var/mysql/mysql.sock连接)第188行的/lampp/htdocs/SID/sid.php)

XAMPP运行正常,我用sudo/opt/lampp/lampp start启动它.http:// localhost /工作正常.我检查了/opt/lampp/etc/my.cnf,没关系,它包含了这个数据http://pastebin.me/8d6b367a7ee76be70f944d9b960bb8f0

请帮忙,我怎样才能获得mysql.sock?

谢谢

mysql linux xampp mysql.sock

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

匹配模式后提取第N行

我想提取使用匹配模式之后的第N行grep,awksed.

例如,我有这段文字:

      Revision:
      60000<br />
Run Code Online (Sandbox Code Playgroud)

我想提取60000.

我尝试过Revision:([a-z0-9]*)\s*([0-9]){5}将修订版与修订版号一起匹配,但是当我将它传递给grep时:grep Revision:([a-z0-9]*)\s*([0-9]){5} file.html我什么都没得到.

我怎样才能做到这一点?

regex awk grep sed

4
推荐指数
2
解决办法
7131
查看次数

类成员和成员函数的内存位置

这是一个简单的C++类:

class A
{
public:
    explicit A() : m_a(0) { }
    explicit A(int a) m_a(a) { }
    int getA() const { return m_a; }
    void setA(int a) { m_a = a; }

private:
    int m_a;
}
Run Code Online (Sandbox Code Playgroud)

这是我目前所知道的:

  • 当您声明类实例的对象时,将为该对象分配内存.分配的内存相当于其成员的内存总结.所以在我的情况下sizeof(A) = sizeof(int) = sizeof(m_a)
  • 类A的所有成员函数都存储在内存中,而类A的所有实例都使用相同的成员函数.

这是我知道的:

成员函数存储在哪里以及它们实际存储的方式?假设int例如存储在4个字节上; 我可以想象RAM内存布局有4个连续的单元格,每个单元格存储一部分int.我怎么能想象一个函数的这个布局?(这听起来很傻,但我想函数必须在内存中占有一席之地,因为你可以指向它们的指针).还存储了功能指令的方式和位置?我的第一个看法是函数和函数指令存储在程序可执行文件(及其动态或静态库)中,但如果这是真的,那么在创建函数指针时会发生什么?AFAIK函数指针指向RAM内存中的位置,它们是否可以指向程序二进制文件中的位置?如果是,这是如何工作的?

任何人都可以向我解释这是如何工作的,并指出我所知道的是对还是错?

c++ memory pointers memory-management

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

使用 QApplication::setStyleSheet 覆盖 Qt 中设置的 QSS 属性

我在其中创建了一个按钮Qt并为其赋予了QSS属性background-color: gray;,而我的外部样式表已将QSS同一按钮的属性设置为background-color: blue;. 当我运行应用程序的按钮显示为灰色,即使样式表应用于之后QWidget::show()被调用和之前QApplication::exec(),如下图所示:

MyWidget w;
w.show();
...
app.setStyleSheet("..."); // contents of external stylesheet
return app.exec();    
Run Code Online (Sandbox Code Playgroud)

是否可以QApplication::setStyleSheet()覆盖QSS分配给Qt.

qt qtstylesheets

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

QComboBox下拉项目边距

我想QComboBox为下拉项目设置保证金.这就是现在的样子:

在此输入图像描述

我想要这样的事情:

在此输入图像描述

我试过了

QComboBox QAbstractItemView::item {
    margin: 3px;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

你能帮帮我吗?

qt qtgui qt5 qtstylesheets qabstractitemview

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

在python 3中使用pip导入运行时安装的模块

我想Python 3在运行时安装和导入模块。

我正在使用以下函数在运行时安装模块pip

def installModules(modules):
    for module in modules:
        print("Installing module {}...".format(module))

        subprocess.call([sys.executable, "-m", "pip", "install", "--user", module])
Run Code Online (Sandbox Code Playgroud)

该模块已成功安装,但在安装完成后,我无法在运行时导入它。所以如果我这样做:

modules = [ "wget", "zipfile2" ]
installModules(module)
import wget
Run Code Online (Sandbox Code Playgroud)

我得到一个ModuleNotFoundError. 如果在那之后,我开始另一个 Python 3 会话,我可以使用模块 eg wget,这意味着模块已经安装,但它们不可用于当前的 Python 3 会话。

是否可以在 Python 3 中安装然后在同一个 Python 3 会话中导入已安装的模块,即安装后?

谢谢!

编辑:

在 VirtualBox 内安装新的 Ubuntu 19.04 后sudo apt-get install python3-pip,运行以下脚本:

import os, sys
import subprocess


def installModules(modules):
    for module in modules:
        print("Installing module {}...".format(module))

        subprocess.call([sys.executable, …
Run Code Online (Sandbox Code Playgroud)

python subprocess pip python-3.x

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

“ d”在d指针中代表什么?

Qt在开发过程中大量使用了PIMPL习惯用法:https//wiki.qt.io/D-Pointer

正如我在这里所读到的:“ d指针”源于Trolltech的Arnt Gulbrandsen,他首先将该技术引入了Qt,使其成为最早的C ++ GUI库之一,即使在更大的发行版之间也保持二进制兼容性。” 。但是没有人说“ D”代表什么。

那么“ D”在D-Pointer中代表什么?

c++ qt pimpl-idiom d-pointer qt5

3
推荐指数
2
解决办法
89
查看次数

如何以编程方式将 ScrollView 滚动到底部?

我一直在尝试创建一个使用 Qt Quick Controls 2 以编程方式滚动到ScrollView底部的函数。我尝试了各种选项,但我在网上找到的大部分支持都是指 Qt Quick Controls 1,而不是 2。这就是我试过了:

import QtQuick 2.8
import QtQuick.Controls 2.4

ScrollView {
    id: chatView

    anchors.top: parent.top
    anchors.left: parent.left
    anchors.right: parent.right
    anchors.bottom: inputTextAreaContainer.top

    function scrollToBottom() {
        // Try #1
//      chatView.contentItem.contentY = chatBox.height - chatView.contentItem.height
//      console.log(chatView.contentItem.contentY)

        // Try #2
//      flickableItem.contentY = flickableItem.contentHeight / 2 - height / 2
//      flickableItem.contentX = flickableItem.contentWidth / 2 - width / 2

        // Try #3
        chatView.ScrollBar.position = 0.0 // Tried also with 1.0
    } …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2 qtquickcontrols2

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