小编jpo*_*o38的帖子

强制三态复选框不移动到不确定状态

嗨,我在WPF工作,我有一个有趣的要求.我需要我的复选框是ThreeState,所以如果只选择了一些子元素,它会显示为不确定.但是当用户点击它时,我希望它选择true或false.

这是一个代表我的要求的故事:

item - indeterminate  
    subItem - checked  
    subItem - unchecked  
    subItem - checked  
Run Code Online (Sandbox Code Playgroud)

当用户点击时item,复选框应在已选中和未选中之间切换.用户永远不能选择"不确定"作为状态.这可能吗?

wpf checkbox

10
推荐指数
2
解决办法
7540
查看次数

QToolButton在Windows中不可见

我已经派生出类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)

c++ windows qt qtabbar qtoolbutton

10
推荐指数
1
解决办法
267
查看次数

什么是摆脱"警告C4267可能丢失数据"的最佳策略?

我将一些遗留代码从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 intsize_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)

c++ windows porting casting suppress-warnings

9
推荐指数
1
解决办法
2867
查看次数

为什么MSVC编译器不检测std :: array越界访问

我用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,这似乎不太安全......

c++ arrays

9
推荐指数
2
解决办法
888
查看次数

什么是更好的:保留矢量容量,预分配大小或推回循环?

我有一个函数,它将一个指向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)

c++ stdvector

8
推荐指数
2
解决办法
1万
查看次数

如何让所有平台编译器为NaN输出相同的字符串?

请考虑以下代码段:

#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).

c++ nan ostream

8
推荐指数
1
解决办法
334
查看次数

Android NDK:为什么arm-linux-androideabi-gdb.exe消失了?

我最近从Android NDK r9b迁移到r11b.

我正在使用QtCreator部署测试应用程序,它使用NDK进行编译.

我不能再调试,QtCreator抱怨它无法找到arm-linux-androideabi-gdb.exe.

我确认:

  • r9b有文件工具链\ arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gdb.exe
  • r11b在工具链中没有它\ arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin
  • 我下载并检查了r10e,这个还包含工具链\ arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\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,我可以调试我的应用程序!

qt android qt-creator android-ndk

8
推荐指数
1
解决办法
3673
查看次数

为什么std :: swap不能用于std :: bitset <n>内容?

考虑这个单元测试:

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)

c++ swap bitset c++11

8
推荐指数
1
解决办法
226
查看次数

是否可以根据其位置改变QSlider手柄的颜色?

我很清楚如何通过样式表自定义QSlider,但我想知道是否可以执行以下操作:

                                              在此输入图像描述

我希望滑块的手柄从蓝色变为黄色.当设置在左侧时,它是蓝色的; 当你向右移动时,它会有一个从蓝色到黄色的渐变.

如果可以通过样式表,怎么样?如果没有,我如何在QSlider的子类的paintEvent中实现它?

c++ qt qslider qtstylesheets

8
推荐指数
2
解决办法
1574
查看次数

Android上的实时蓝牙SPP数据流仅工作5秒

我有一个自制的蓝牙设备,测量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)

java streaming android bluetooth

7
推荐指数
1
解决办法
9735
查看次数