嗨,我在WPF工作,我有一个有趣的要求.我需要我的复选框是ThreeState,所以如果只选择了一些子元素,它会显示为不确定.但是当用户点击它时,我希望它选择true或false.
这是一个代表我的要求的故事:
item - indeterminate
subItem - checked
subItem - unchecked
subItem - checked
Run Code Online (Sandbox Code Playgroud)
当用户点击时item,复选框应在已选中和未选中之间切换.用户永远不能选择"不确定"作为状态.这可能吗?
我已经派生出类QTabBar实现"+"(new tab button)按钮使用QToolButton(类似于谷歌浏览器).但是,它在我的Linux机器上工作,但在我的Windows机器上不起作用.通过不工作我的意思QToolButton是在我看不到,windows machine但它在我的Linux机器(Ubuntu)中可见.我无法进一步调试,因为我已经尝试了很少的实验来理解原因,但它没有用.
我的源文件:
#include "tabbar.h"
TabBar::TabBar(QWidget *parent) : QTabBar(parent)
{
new_button_ = new QToolButton(this);
new_button_->setObjectName(QStringLiteral("AddButton"));
new_button_->setText("+");
new_button_->setFixedSize(QSize(20, 20));
connect(new_button_, SIGNAL(released()), this, SLOT(emit_new()));
movePlusButton();
}
QSize TabBar::sizeHint(void) const
{
QSize old = QTabBar::sizeHint();
return QSize(old.width() + 45, old.height());
}
void TabBar::emit_new(void)
{
emit newClicked();
}
void TabBar::movePlusButton(void)
{
quint64 totalWidth = 0;
for (long i=0; i < count(); i++)
totalWidth += tabRect(i).width();
quint64 h = …Run Code Online (Sandbox Code Playgroud) 我将一些遗留代码从win32移植到win64.不是因为Win32对象的大小是为我们的需求太少,而是因为Win64的是现在比较标准,我们希望端口的所有我们的环境,以这种格式(和我们也使用一些第三方库提供的64位比32位更好的性能) .
我们最终得到了大量的;
警告C4267:'参数':从'size_t'转换为'...',可能会丢失数据
主要是由于代码如下:unsigned int size = v.size();哪里v是STL容器.
我知道为什么警告有意义,我知道它为什么发布以及如何解决.但是,在这个具体的例子中,我们从未经历过容器大小unsigned int过去超过最大值的情况....所以当代码移植到64位环境时,没有理由出现这个问题.
我们讨论了什么是最好的策略来压制那些嘈杂的警告(他们可能会隐藏我们将会遗漏的相关警告),但我们无法对适当的策略做出决定.
所以我在这里问这个问题,最佳推荐策略是什么?
1.使用 static_cast
用一个static_cast.做unsigned int size = static_cast<unsigned int>(v.size());.我并不"喜欢",因为我们放弃了64位容量来在容器中存储大量数据.但由于我们的代码从未达到32位限制,所以这似乎是一个安全的解决方案......
2.替换unsigned int为size_t
这肯定更难,因为unsigned int size上面示例中的对象可以被设置为其他函数,保存为类属性,然后删除单行警告可能最终导致数百个代码更改...
3.禁用警告
这很可能是一个非常糟糕的主意,因为在这种情况下uint8_t size = v.size()它也会禁用警告,这肯定会导致数据丢失....
4.定义"安全演员"*功能并使用它
像这样的东西:
template <typename From, typename To> To safe_cast( const From& value )
{
//assert( value < std::numeric_limits<To>::max() && value > std::numeric_limits<To>::min() );
// Edit 19/05: test above fails in some …Run Code Online (Sandbox Code Playgroud) 我用a替换了一个旧样式数组std::array,但后来我意识到编译器(至少是MSVC)正在进行较少的绑定检查.考虑以下代码:
double myArray[10];
myArray[11] = 3.0;
std::array<double,10> myStdArray;
myStdArray[11] = 3.0;
Run Code Online (Sandbox Code Playgroud)
Fo myArray报告了一个警告:
警告C4789:大小为80字节的缓冲区'myArray'将被溢出; 从偏移量88开始写入8个字节
因为myStdArray,根本没有报告任何警告.
它是编译器中的"错误"还是std::array实现方式不允许报告此类警告?如果是这样,值得使用std::array,这似乎不太安全......
我有一个函数,它将一个指向char数组和段大小的指针作为输入参数,并调用另一个需要a的函数std::array<std::string>.我们的想法是将输入字符数组"划分"为相等的部分,并形成字符串数组.
输入字符数组格式是几个确定大小的小型数组(或字符串),连接到togeather.这些都不是假定为零终止的,尽管它们可能是.段大小5和元素数量10的示例:
char k[] = "1234\0001234\0001234\0001234\0001234\0001234\0001234\0001234\0001234\0001234\000";
char m[] = "1234\00067890987654321\000234567809876\0005432\000\000\0003456789098";
char n[] = "12345678909876543211234567890987654321123456789098";
Run Code Online (Sandbox Code Playgroud)
所有char数组的长度为51(segment*elements + 1).我的目标是使函数有效地使用资源,最重要的是执行时间.
由于有许多方法可以给猫皮肤,我有两种(或三种)方法可以解决这个问题,问题是,哪种"更好"?我的意思是更快,更少资源浪费.我不是专业人士,请耐心等待我.
在这里,values预先分配,然后为每个字符串分配一个值.
void myfnc_1(void *a_src, uint32_t a_segment) {
// a_segment = 5 for example
size_t nSize = GetSize(); // another method, gets 10
std::vector<std::string> values(nSize);
char* v = a_src; // take k, n or m for example
for (size_t i = 0; i < nSize; ++i) {
values.at(i).assign(v, a_segment);
v += a_segment;
}
}
Run Code Online (Sandbox Code Playgroud)
这里,没有分配向量,但是每次迭代都添加了一个新的字符串.
void myfnc_1(void *a_src, uint32_t …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码段:
#include <iostream>
#include <string>
#include <limits>
int main()
{
std::cout << std::numeric_limits<double>::quiet_NaN();
}
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio 2010编译时,输出为1.#QNAN.用g ++编译时,输出是nan.请注意,Visual Studio 2015输出"nan".
但是,我需要两者都产生相同的输出.最简单的方法是什么?我试图覆盖operator<<,double但我觉得这不是正确的方法.在全局级别(使用东西?从未使用过......),NaN可以在stream级别或更好的位置强制使用字符串作为值std::locale.
我找到了这个squaring_num_put示例.有趣,因为它是一种修改数字的方法被重定向到输出.但我正在努力使其适应我的问题(无法do_put向...发送数字或硬编码的"NaN"字符串ostream).
我最近从Android NDK r9b迁移到r11b.
我正在使用QtCreator部署测试应用程序,它使用NDK进行编译.
我不能再调试,QtCreator抱怨它无法找到arm-linux-androideabi-gdb.exe.
我确认:
为什么他们从发布r11b中删除GDB?我们现在应该怎么调试?
编辑:提交的Qt错误:https://bugreports.qt.io/browse/QTCREATORBUG-15933.可以在NDK文件夹中的其他位置手动拾取gdb.但是,在找到gdb.exe之后我仍无法调试...
编辑2:问题由Qt修复.升级到QtCreator 4.0.3.它正确地调整了gdb,我可以调试我的应用程序!
考虑这个单元测试:
std::bitset<8> temp( "11010100" );
reverseBitSet( temp );
CPPUNIT_ASSERT( temp == std::bitset<8>( "00101011" ) );
Run Code Online (Sandbox Code Playgroud)
此实现有效:
template<size_t _Count> static inline void reverseBitSet( std::bitset<_Count>& bitset )
{
bool val;
for ( size_t pos = 0; pos < _Count/2; ++pos )
{
val = bitset[pos];
bitset[pos] = bitset[_Count-pos-1];
bitset[_Count-pos-1] = val;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这个没有:
template<size_t _Count> static inline void reverseBitSet( std::bitset<_Count>& bitset )
{
for ( size_t pos = 0; pos < _Count/2; ++pos )
{
std::swap( bitset[pos], bitset[_Count-pos-1] );
}
} …Run Code Online (Sandbox Code Playgroud) 我很清楚如何通过样式表自定义QSlider,但我想知道是否可以执行以下操作:
我希望滑块的手柄从蓝色变为黄色.当设置在左侧时,它是蓝色的; 当你向右移动时,它会有一个从蓝色到黄色的渐变.
如果可以通过样式表,怎么样?如果没有,我如何在QSlider的子类的paintEvent中实现它?
我有一个自制的蓝牙设备,测量500Hz的心电图:设备每2 ms发送9个字节的数据(标头,ECG测量,页脚).所以这大约是9*500 = 4.5kbytes/s的数据流.
我有一个C++ Windows程序能够连接设备并检索数据流(用Qt/qwt显示).在这种情况下,我使用Windows控制面板来绑定设备,然后使用boost serial_port接口通过虚拟COM端口连接它.这非常有效,而且我实时接收数据流:我每2ms左右得到一个测量点.
我通过QtCreator(Qt 5.3.2)在Android上移植了整个C++程序.我有实时问题.数据流在前5秒内处于"实时"状态,然后性能将大幅降低(请参阅如何使用Java Android SDK进行良好的实时数据流).
因为我认为问题可能是由于C++/Qt,我使用Eclipse编写了一个完全空白的纯Java/Android项目.它有同样的问题!
问题是:这段代码有问题吗?为什么我只在5秒内实时接收数据?在Android平台上使用5秒强化BT之后会发生什么?为什么它会减慢BT数据的接收速度?
这是我的Java程序:
BluetoothHelper.java(具有连接/断开/读取和写入数据的功能:
package com.example.helloworld;
import android.util.Log;
import android.content.Context;
import android.os.Bundle;
import java.util.Locale;
import java.util.concurrent.Semaphore;
import java.lang.String;
import java.lang.Thread;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.lang.InterruptedException;
import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.bluetooth.BluetoothManager;
import android.util.SparseArray;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import java.util.UUID;
import java.util.Date;
import java.util.Calendar;
import java.util.Vector;
import java.util.Set;
import java.util.Arrays;
public class BluetoothHelper …Run Code Online (Sandbox Code Playgroud)