这个问题更多的是一种询问,而不是实际寻求问题的解决方案。
QList::at()不仅不检查索引是否越界,而且还返回 aconst因此它只能在以下场景中使用read-only:
const T &QList::at(int i) const
返回列表中索引位置 i 处的项目。i 必须是列表中的有效索引位置(即,0 <= i < size())。
这个函数非常快(恒定时间)。
我刚刚在尝试为列表中的元素分配新值时发现了这些特殊的实现细节QList,我想知道是否有这样做的理由。
如果C++ STL我们采取std::array或std::vector(我不采取std::list,因为它根本没有std::list::at()),我们有以下内容:
std::向量::at
该函数自动检查 n 是否在向量中有效元素的范围内,如果不在则抛出 out_of_range 异常
起初我以为不包括检查是为了确保“这个功能非常快(恒定时间)”。然而,在查看了实现之后,QList我不得不说,即使包含恒定时间(并且高速)的检查,也绝对可以保证。
检查越界需要两件事(据我所知):
O(1)如果我们使用一些古怪的符号)。显然我们不能有负索引(我们可以,Python但它有另一个含义;))检查给定索引是否< QList::size()- 常数时间也存在于此,因为QList::size()实现方式是:
inline int size() const Q_DECL_NOTHROW { return d->end - d->begin; }
Run Code Online (Sandbox Code Playgroud)
这又是O(1)(如果我没记错的话),因为这两个值都存储在QList::d参数内,该参数是指向 …
我目前正在努力解决什么应该很容易解决的问题。许多小部件支持某种QSizePolicy。这包括QPushbutton。在我的情况下,我在网格布局中有多个按钮,所有这些按钮的 QSizePolicy垂直和水平调整大小都设置为expand。这导致根据网格布局所属的小部件的大小调整按钮大小的 nead 结果。
问题来自 Qt 中图标的处理方式。QIcon 没有 QSizePolicy 属性(或者至少我无法在 Qt4 的官方文档中找到关于QIcon和QAbstractButton 的属性)。唯一的方法似乎是使用setIconSize(),您可以在其中提供图标的最大大小。此外,必须手动实施关于如何更新大小的例程。在这种情况下,它将是(这里抽象写作)icon.size == button.size-CONSTANT,其中 CONSTANT 是某种预定义的因子(> = 0)。为所选图标预定义各种尺寸(QIcons 列表)也是可能的,但仍然不是一个好的选择(请阅读下面的原因)。
这似乎有点矫枉过正,特别是因为 QPushbutton 支持 QSizePolicy 并且开发人员根本不必修补这个部门,除非他/她想要一些特殊的调整大小。这也与QIcon对 SVG 文件的支持相矛盾,因为众所周知,SVG = 矢量图形 = 您可以随意拉伸这些文件而不会降低质量。
有没有人知道一种简单的方法来做到这一点,而无需添加额外的偶数句柄来调整大小,提供所选图标的比例列表或将大小限制为最大大小?
PS:我也研究过 QPixmap - 那里仍然存在同样的问题。
编辑:
我忘了提一个方式,我发现了如何做我想要的(结果却不如漂亮,我希望他们是) -使用图像在样式表属性QPushbutton。但是,这不会创建图标!如果一个人真的不需要一个真正的图标并且可以使用这个属性来使用一个绘制的按钮,那么在调整大小方面会有很大的灵活性,尤其是在使用 SVG 时。
在回答与Python相关的问题时,我做了一些实验,发现了一个我无法弄清楚的与元组相关的事情:我很难理解为什么空元组比其中包含单个元素的元组占用更多空间(根据sys.getsizeof()) 。下面的代码是在 64 位 Debian Jessie 系统上使用 Python 2.7.9 的上游版本执行的(也使用 Python 3.4.2 进行了测试,其中值略有不同,但我正在讨论的整体行为仍然存在):
>> sys.getsizeof(())
56
>> sys.getsizeof((1))
24
>> sys.getsizeof((1,2))
72
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,空元组与单项元组之间存在很大差异(更准确地说是 2.3 倍)。你知道这里发生了什么吗?由于元组是递归数据结构,我假设sys.getsizeof()返回的值是元组对象本身占用的内存量加上对其包含的对象的引用(如果元组将元素存储为引用而不是值 - 我不知道)。我最初的想法是,像字典一样,元组是在内存中创建的,具有一定的默认大小,可以容纳几个元素。我忘记了空字典保留内存的确切元素数量,但这就是我的一个小例子的意思:
>> sys.getsizeof({})
280
>> sys.getsizeof({"a":0})
280
>> sys.getsizeof({"a":0, "b":1})
280
Run Code Online (Sandbox Code Playgroud)
然而,查看元组似乎并没有表现出相同的行为,因为元组在第一个元素添加到较小的尺寸后会收缩,然后随着添加到其中的每个元素而增长(如预期)。除此之外,列表似乎没有遭受相同的行为:
>> sys.getsizeof([])
72
>> sys.getsizeof([1])
80
>> sys.getsizeof([1,2])
88
Run Code Online (Sandbox Code Playgroud)
空列表在内存方面比具有 1 个或多个元素的列表小 - 完全正常。
我的第二个想法是,单元素元组以某种方式转换为它包含的单个对象,并且所有内容都以某种方式包装,以便看起来它实际上是一个列表(这就是len()工作的原因)。例子:
>> sys.getsizeof((1))
24
>> sys.getsizeof(1)
24
Run Code Online (Sandbox Code Playgroud)
这似乎是可能的,但我不相信它真的发生了。
我正在学习关于许可向导(使用PyQt5)的教程,尝试学习如何创建非线性向导。但是我似乎被困在一个问题上。
我想要一个页面,QComboBox其中所选项目确定QWizardPage包含组合框的当前页面是否为最终页面。
到目前为止,该页面包含的内容如下:
class CalibrationPageSource(QWizardPage):
def __init__(self, parent):
super(CalibrationPageSource, self).__init__(parent)
self.setTitle('Calibration Wizard')
self.setSubTitle('Select the source for the calibration')
layout = QVBoxLayout()
label = QLabel('''
<ul>
<li><b>From calibration file</b>: browse and select an existing YAML calibration file that contains the camera matrix and distortion coefficients (for example from a previous calibration)</li>
<li><b>From image files</b>: browse and select one or more image files with the calibration pattern visible inside each</li>
<li><b>From stream</b> - if …Run Code Online (Sandbox Code Playgroud) 我正在使用Pipe模块Process(multiprocessingPython 3.8)。我的初始程序如下所示:
from multiprocessing import Process, Pipe
class Process1(object):
def __init__(self, pipe_out):
self.pipe_out = pipe_out
self.run()
def run(self):
try:
while True:
print("Sending message to process 2")
self.pipe_out.send(["hello"])
except KeyboardInterrupt:
pass
class Process2(object):
def __init__(self, pipe_in):
self.pipe_in = pipe_in
self.run()
def run(self):
try:
while self.pipe_in.poll():
request = self.pipe_in.recv()
method = request[0]
args = request[1:]
try:
getattr(self, method + "_callback")(*args)
except AttributeError as ae:
print("Unknown callback received from pipe", str(ae))
print("Process 2 done with receiving")
except …Run Code Online (Sandbox Code Playgroud) 我有一个C#问题,过去几天一直困扰着我.我将尝试根据我正在做的事情的抽象描述来解释它.希望很容易遵循.;)
假设我们有一个界面
interface iFoo {
void a();
}
Run Code Online (Sandbox Code Playgroud)
此外,我有两个实现此接口的类及其中的方法:
class bar1 : iFoo
{
public void a() { Console.WriteLine("bar1"); }
public void anotherMethodBar1() { Console.Write("I love "); }
}
class bar2 : iFoo
{
public void a() { Console.WriteLine("bar2"); }
public void anotherMethodBar2() { Console.Write("beer"); }
}
Run Code Online (Sandbox Code Playgroud)
每个类还提供了一个额外的唯一方法 - anotherMethodBar1()和anotherMethodBar2().现在在我的main()中我想创建一个列表,其中包含实现我的界面的对象,如下所示:
namespace ExampleFooBar
{
class Program
{
static void Main(string[] args)
{
List<iFoo> fooBarObjects = new List<iFoo>();
fooBarObjects.Add(new bar1());
fooBarObjects.Add(new bar2());
for(int i = 0; i < fooBarObjects.Count; i++)
{
if(fooBarObjects[i].GetType() …Run Code Online (Sandbox Code Playgroud) 我刚开始学习JavaScript(正确:D),我很难处理上面提到的错误.我正在使用的浏览器是Google ChromeDebian Jessie 64bit系统的最新版本.代码嵌入在<script/>我的页面标记内:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head/>
<body bgcolor="white">
<p><u>Counter:</u></p>
<div id="counter"/>
<p><u>Temperature conversion:</u></p>
<div id="temperature"/>
<script type="text/javascript">
function printRange(_from, _to) {
// ...
}
function fahrenheitToCelsius(fahrenheits) {
return 5/9 * (fahrenheits - 32);
}
document.getElementById("counter").innerHTML = printRange(2,-10); // (1)
var fahrenheits = prompt("Enter Fahreheit degrees", 50);
var celsius = fahrenheitToCelsius(fahrenheits);
var para = document.createElement("p");
para.textContent = fahrenheits + "F = " + celsius + "oC";
document.getElementById("temperature").appendChild(para); // …Run Code Online (Sandbox Code Playgroud) 我最近开始学习QML(很久以前就尝试过),但是我一直坚持Qt C++代码与之交互的方式QML,反之亦然。
我有一个Counter具有以下标题:
#include <QObject>
#include <QTimer>
class Counter : public QObject
{
Q_OBJECT
Q_PROPERTY(int count
READ getCount
WRITE setCount
NOTIFY signalCountChanged)
public:
Counter(QObject *parent = Q_NULLPTR);
int getCount();
void setCount(int count);
signals:
void signalCountChanged(int);
public slots:
void slotStart();
private slots:
void slotTimeout();
private:
int count;
QTimer *timer;
};
Run Code Online (Sandbox Code Playgroud)
我main.cpp的如下:
#include <QtGui/QGuiApplication>
#include <QtQml/QQmlContext>
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickItem>
#include <QtQuick/QQuickView>
#include "counter.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, …Run Code Online (Sandbox Code Playgroud) 注意:您可以在本文末尾找到一个最小的工作示例.
我正在使用Qt 5.7.假设我有以下内容QHash:
QHash<HashKey, HashValue> hm;
Run Code Online (Sandbox Code Playgroud)
同
enum HashKey {
K1,
K2,
K3,
K4,
K5
}
Run Code Online (Sandbox Code Playgroud)
和
class HashValue {
public:
int x;
HashValue(int x) {
this->x = x;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经像这样初始化了哈希映射:
hm.insert(K1, HashValue((int)K1));
hm.insert(K2, HashValue((int)K2));
hm.insert(K3, HashValue((int)K3));
hm.insert(K4, HashValue((int)K4));
hm.insert(K5, HashValue((int)K5));
Run Code Online (Sandbox Code Playgroud)
我通过电话测试了它
cout << hm.value(K4).x << endl;
cout << hm.find(K4).value().x << endl;
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的结果3.现在我尝试使用一个不是哈希映射的一部分的键来做同样的操作,方法是将一个整数转换为HashKey并调用上面两个方法:
cout << hm.value(static_cast<HashKey>(100)).x << endl;
cout << hm.find(static_cast<HashKey>(100)).value().x << endl;
Run Code Online (Sandbox Code Playgroud)
我得到的是8(第一次打电话value().x)和5(第二次打电话 …
我正在使用 Qt Designer 和 UI 表单。Qt 的目标版本是最新的 PySide2 (Qt 5.x)。
我已向我的QTabWidget. 此外,我还向每个选项卡(也称为页面)中的多个其他组件添加了工具提示。我注意到,每当我的鼠标悬停在选项卡内的某个区域(没有其他带有工具提示的小部件)上方(有足够的时间来触发工具提示)时,我都会获得该选项卡的工具提示。
我正在寻找的行为是仅当鼠标悬停在选项卡标题上时才显示选项卡工具提示。否则,我最终会遇到奇怪的情况,例如当我悬停时,选项卡的工具提示会弹出,假设该选项卡中的按钮没有自己的工具提示。往好了说是丑陋的,往坏了说是让用户感到困惑。
有没有简单的方法可以防止这种情况发生?我不得不承认,我在以前的项目中很少使用工具提示,但现在我决定更加关注该功能。
c++ ×4
qt ×4
python ×3
javascript ×2
autoresize ×1
c# ×1
casting ×1
constants ×1
hash ×1
indexing ×1
interface ×1
key ×1
list ×1
methods ×1
null ×1
pipe ×1
pyqt ×1
pyqt4 ×1
pyqt5 ×1
pyside2 ×1
python-2.7 ×1
python-3.x ×1
qhash ×1
qlist ×1
qml ×1
qtabwidget ×1
stl ×1
svg ×1
tabs ×1
tkinter ×1
tooltip ×1
transitions ×1
tuples ×1
wizard ×1