我想根据用户输入在 Qt 应用程序中动态添加选项卡。
默认情况下,一个选项卡始终存在。为了方便起见,如果我可以在图形编辑器中创建此选项卡的布局和功能,那就太好了。然后我想将此布局转移到代码中,放入类构造函数并添加选项卡,例如:
ui->tabWidget->addTab(new myTabClass(), "Tab 2");
我也想以编程方式推广此选项卡。那可能吗?
我想将像浮点数这样的大变量分成字节段,并通过UART逐字节地发送这些变量.我正在使用C/C++.
一种方法可能是深入复制我想要发送给联合的值,然后发送它.我认为这将是100%安全但速度慢.工会看起来像这样:
union mySendUnion
{
mySendType sendVal;
char[sizeof(mySendType)] sendArray;
}
Run Code Online (Sandbox Code Playgroud)
另一种选择可能是将指向我想要发送的值的指针转换为指向特定联合的指针.这还安全吗?
第三个选项可能是将指针强制转换为我要发送给char的值,然后递增指针,如下所示:
sendType myValue = 443.2;
char* sendChar = (char*)myValue;
for(char i=0; i< sizeof(sendType) ; i++)
{
Serial.write(*(sendChar+j), 1);
}
Run Code Online (Sandbox Code Playgroud)
我已经成功使用了上面的指针算术,但我不确定它在所有情况下是否安全.我担心的是,如果我们使用32位处理器并想发送一个浮点数会怎样.编译器选择将此32位浮点存储到一个存储器单元中,但仅将一个单个字符存储到每个32位单元中.
然后每个计数器增量使程序指针增加一个整个存储单元,我们将错过浮点数.
C标准中是否存在阻止此问题的内容,或者这可能是某个编译器的问题?
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) 我想创建一个由单个字符组成的字符串,例如'\ t',就是它,但是String类构造函数不会接受它.
String myTab = new String( '\t' );
Run Code Online (Sandbox Code Playgroud)
这给了我:
错误2参数1:无法从'char'转换为'char*'
好吧,我认为从C++切换后我不需要指针,但我会给你一个:
char oneChar = '\t';
String myTab = new String( &oneChar );
Run Code Online (Sandbox Code Playgroud)
得到:
错误1指针和固定大小的缓冲区只能在不安全的上下文中使用
所以我尝试了这种笨拙的转换而没有成功:
String myTab = new String( ToString('\t') );
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
错误3参数1:无法从'string'转换为'char []'
这是有史以来最简单的问题,它让我很烦恼.任何人都可以告诉我如何解决它以及为什么字符串类不能接受单个字符?