我知道有很多关于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) 在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 …
我按照以下说明从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?
谢谢
我想提取使用匹配模式之后的第N行grep
,awk
或sed
.
例如,我有这段文字:
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
我什么都没得到.
我怎样才能做到这一点?
这是一个简单的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)
这是我不知道的:
成员函数存储在哪里以及它们实际存储的方式?假设int
例如存储在4个字节上; 我可以想象RAM内存布局有4个连续的单元格,每个单元格存储一部分int.我怎么能想象一个函数的这个布局?(这听起来很傻,但我想函数必须在内存中占有一席之地,因为你可以指向它们的指针).还存储了功能指令的方式和位置?我的第一个看法是函数和函数指令存储在程序可执行文件(及其动态或静态库)中,但如果这是真的,那么在创建函数指针时会发生什么?AFAIK函数指针指向RAM内存中的位置,它们是否可以指向程序二进制文件中的位置?如果是,这是如何工作的?
任何人都可以向我解释这是如何工作的,并指出我所知道的是对还是错?
我在其中创建了一个按钮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
.
我想QComboBox
为下拉项目设置保证金.这就是现在的样子:
我想要这样的事情:
我试过了
QComboBox QAbstractItemView::item {
margin: 3px;
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
你能帮帮我吗?
我想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) Qt在开发过程中大量使用了PIMPL习惯用法:https://wiki.qt.io/D-Pointer
正如我在这里所读到的:“ d指针”源于Trolltech的Arnt Gulbrandsen,他首先将该技术引入了Qt,使其成为最早的C ++ GUI库之一,即使在更大的发行版之间也保持二进制兼容性。” 。但是没有人说“ D”代表什么。
那么“ D”在D-Pointer中代表什么?
我一直在尝试创建一个使用 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 ×5
c++ ×3
pointers ×2
qt5 ×2
awk ×1
d-pointer ×1
functor ×1
grep ×1
linux ×1
memory ×1
memory-leaks ×1
mysql ×1
mysql.sock ×1
pimpl-idiom ×1
pip ×1
python ×1
python-3.x ×1
qml ×1
qtgui ×1
qtquick2 ×1
regex ×1
sed ×1
subprocess ×1
xampp ×1