如何使一个QVector小部件,如动态数的(或其他容器类),QPushButton或QComboBox在Qt的4?
我在我的窗口类的构造函数中使用了以下内容:
QVector<QComboBox*> foo; // Vector of pointers to QComboBox's
Run Code Online (Sandbox Code Playgroud)
现在我想用一些可以动态改变的控件来填充它:
for(int count = 0; count < getNumControls(); ++count) {
foo[count] = new QComboBox();
}
Run Code Online (Sandbox Code Playgroud)
我搜索了几个小时试图找到答案.Qt论坛提到了一个QPtrList,但Qt4中不再存在该类.我稍后尝试使用数组样式索引或.at()函数从每个文本中获取文本值.
我非常感谢声明,初始化,和填充的任何任何数据结构的一个例子QWidgets(QComboBox,QPushButton等)
如何将QVector的一部分发送到函数?
QVector<int> a;
a.append(1);
a.append(2);
a.append(3);
a.append(4);
a.append(5);
Run Code Online (Sandbox Code Playgroud)
某些打印功能应打印"2 3 4",将矢量的子集作为参数.
在R中,这是可能的a[2:4].
这是可能吗?
注意:在std::vector,建议使用该insert函数创建一个新变量.这是一个不同的插入,但QVector我找不到推荐的方法.
我有一个QList和QVector.我填充Qlist,然后尝试复制到QVector.Ovector有一个fromList()方法.但它不起作用.
我的代码:
QList<int> listA;
QVector<int> vectorA; //I also tried QVector<int>vectorA(100);
for(int i=0; i<100; i++)
{
listA.append(i);
}
vectorA.fromList(listA);
Run Code Online (Sandbox Code Playgroud)
此代码后,vectorA返回空
我在Linux下使用Qt 4.8.5
我试图从一个应该计算移动平均值的函数返回一个QVector.我的问题是如何使功能更有效.数学很好,我更想知道如果我在返回QVector时做错了什么.这是我到目前为止的代码:
QVector<double> moving_exponential_average(const QVector<double>& a, double lambda) {
if(lambda <0 ) {
lambda = 0;
}
if(lambda >1) {
lambda = 1;
}
QVector<double> b;
b.reserve(a.size());
b.append(a[0]);
double l_inv = 1-lambda;
for(unsigned int i = 1; i < a.size(); ++i) {
b.append(a[i]*lambda+l_inv*b[i-1]);
}
return b;
}
Run Code Online (Sandbox Code Playgroud)
我使用默认构造函数来保持QVector不设置默认值.我尝试调整大小的速度要慢得多.您有什么建议如何优化?
问候
如果我有一个 QVector,我可以使用基于范围的循环,使用引用并更改 QVector 中的对象。
但如果我在修改对象时需要索引,我必须使用普通的 for 循环。但是我怎样才能改变 QVector 中对象的值呢?
作为解决方法,我在更改临时对象后使用了替换方法,但这有点难看。
这是代码:
struct Resource {
int value = 0;
};
int main(int argc, char *argv[])
{
QVector<Resource> vector{Resource{}, Resource{}, Resource{}};
qDebug() << vector.at(0).value
<< vector.at(1).value
<< vector.at(2).value;
for(Resource &res : vector)
res.value = 1;
qDebug() << vector.at(0).value
<< vector.at(1).value
<< vector.at(2).value;
for(int i = 0; i < vector.size(); ++i) {
//Resource &res = vector.at(i); <-- won't compile: cannot convert from 'const Resource' to 'Resource &'
Resource &res = vector.value(i); //Compiles, but …Run Code Online (Sandbox Code Playgroud) 我试图将数据保存到与此类似的成员值
我有一个包含成员变量的QVector对象..at()禁止使用是因为我试图转换const,.value()不保存更改,因为它只是一个实例.
我尝试使用[]运算符返回对象的非const引用,以便更改成员变量的值我怎么得到错误
class QVector<Object>' has no member named 'value'
objects[i].value = newValue;
^
Run Code Online (Sandbox Code Playgroud)
以下是使用缩短的类导致错误的代码段:
void Class::linkValueToObject(QVector<Object>* objects, QStringList* data )
{
for( int i = 0; i < object->size(); ++i )
for( int j = 0; j < data->size(); ++j )
if( conditionMet )
{
newValue = data.at(j)
objects[i].value = newValue //Line of error
break;
}
}
class Object
{
public:
QString value;
}
Run Code Online (Sandbox Code Playgroud)
导致此错误的原因是什么?
我有一个QVector,它应该存储文件路径,比如
"./zThumbnail/1004.jpeg"
"./zThumbnail/1005.jpeg"
"./zThumbnail/1006.jpeg"
"./zThumbnail/1007.jpeg"
"./zThumbnail/1008.jpeg"
"./zThumbnail/1009.jpeg"
"./zThumbnail/101.jpeg"
"./zThumbnail/1010.jpeg"
"./zThumbnail/1011.jpeg"
"./zThumbnail/1012.jpeg"
"./zThumbnail/1013.jpeg"
QFileInfoList filelistinfo = dir.entryInfoList();
foreach (const QFileInfo &fileinfo, filelistinfo) {
imagePath.push_back(fileinfo.absoluteFilePath());
qDebug() << fileinfo.absoluteFilePath();
}
./abc/1.jpg
./abc/2.jpg
./abc/3.jpg
.
.
.
./abc/1209.jpg
Run Code Online (Sandbox Code Playgroud)
但不是按照上面的顺序存储它,而是存储像
./abc/1.jpg
./abc/10.jpg
./abc/100.jpg
./abc/1000.jpg
./abc/1001.jpg
.
.
Run Code Online (Sandbox Code Playgroud)
如何以数字顺序存储图像文件路径?
我正在尝试将QVector与名为RoutineItem的自定义对象一起使用.
但是给出了这个错误:
C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265: error: no matching function for call to 'RoutineItem::RoutineItem()'
Run Code Online (Sandbox Code Playgroud)
这是RoutineItem构造函数:
RoutineItem(QString Name,int Position,int Time,bool hasCountdown = false,bool fastNext = false);
Run Code Online (Sandbox Code Playgroud)
如果我删除所有构造函数参数,我不再得到该错误.如何将QVector与具有参数的自定义对象一起使用?
说我有一个QVector,我为420000元素调用QVector :: reserve.在那之后我又打电话QVector::reserve给42个元素.我注意到,在执行此操作后,该进程仍然为这些420000个元素分配了内存.当我将QVector大小缩小到42 时,为什么内存不会被释放?
请使用以下代码:
#include <QCoreApplication>
#include <QVector>
#include <QDebug>
typedef QVector<QPointF> PointVec;
typedef QList<PointVec*> PointVecList;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "Processing...";
PointVecList list;
for (int i = 0; i < 4200; i++) {
PointVec *v = new PointVec();
v->reserve(420000);
v->resize(420000);
v->reserve(42);
v->resize(42);
list.append(v);
}
qDebug() << "End of processing...";
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
此代码在32位系统上崩溃抛出std::bad_alocexception(Unhandled exception at 0x7729C41F in QtConsoleApplication1.exe: Microsoft C++ exception: std::bad_alloc at …
1)我想将 QVector 的指针传递给一个函数,然后用它做事。我试过这个:
void MainWindow::createLinearVector(QVector<float> *vector, float min, float max )
{
float elementDiff=(max-min)/(vector->size()-1);
if(max>min) min -= elementDiff;
else min += elementDiff;
for(int i=0; i< vector->size()+1 ; i++ )
{
min += elementDiff;
*(vector+i) = min; //Problematic line
}
}
Run Code Online (Sandbox Code Playgroud)
但是编译器给我 “不匹配的运营商=”为*(vector+i) = min;行。在 QVector 上执行此类操作的最佳方法是什么?
2) 该函数应该以 matlab : 运算符的工作方式线性分布向量上的值,例如 vector(a:b:c)。在 Qt 中执行这些事情的最简单和最好的方法是什么?
编辑:
有了这里的帮助,最初的问题就解决了。:)
我也改进了方法本身。通过使用线性插值而不是像上面那样的多次加法,可以大大提高精度。多次加法会累积误差,而在很大程度上可以通过线性插值消除误差。
顺便说一句,第一个函数中的 if 语句是不必要的,即使在多重加法方法中也可以通过稍微重新排列一些东西来删除。
void MainWindow::createLinearVector(QVector<double> &vector, double min, double max )
{
double range = max-min;
double n = vector.size(); …Run Code Online (Sandbox Code Playgroud) 我试图将多项式系数保存在QVector. 我的多项式是 2 次,所以它有三个数字。
当我定义时QVector<double[3]> zeros_Real(n + 1)出现错误(如下)。首先,我认为我可以使用QVector<QVector<double>>,但这会是速度和内存问题,所以我决定不这样做。
为什么我不能有QVector元素double[3]?
错误:
mingw32-make[1]: *** [debug/main.o] Error 1
mingw32-make: *** [debug] Error 2
21:27:01: The process "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project untitled11 (kit: Desktop Qt 5.5.1 MinGW 32bit)
When executing step "Make"
Run Code Online (Sandbox Code Playgroud) 有没有办法使用的方式QVariant有QVector?
我需要实现一个比较两个向量的函数,例如:
#include <QDebug>
#include <QVector>
#include <QString>
bool compareVectors(QVector<QVariant> vec1, QVector<QVariant> vec2)
{
qDebug() << "Comparing vectors!";
if( vec1 != vec2 )
{
qDebug() << "The vectors are different!";
return false;
}
qDebug() << "The vectors are equal!";
return true;
}
int main()
{
QVector<double> v1;
QVector<double> v2;
v1 << 1 << 2;
v2 << 3 << 4;
QVector<QString> v3;
QVector<QString> v4;
v3 << "1" << "2";
v4 << "3" << "4";
compareVectors(v1, v1);
compareVectors(v3, …Run Code Online (Sandbox Code Playgroud) 我有一个名为Symbol的类,我想创建一个QVector子类(Symbols)来添加一些有用的方法.但是当我使用来自另一个类A的符号时,编译器会给出错误'符号没有命名类型'.
class Symbols: public QVector< Symbol >
{
public:
Symbols() {}
// Useful methods
QSymbol findSymbol(const QString &name);
// ...
};
class A
{
private:
Symbols symbols;
};
Run Code Online (Sandbox Code Playgroud)
它是否正确分类?
为什么在编译A类时出现'符号不命名类型'?