小编Exa*_*Exa的帖子

Qt:在数字字符串上使用QSortFilterProxyModel并获取错误的列文本时排序错误

我有简单的模型视图树视图与QSortFilterProxyModel代理来排序列和QStandardItemModel作为
每个列中的模型有字符串得到精细排序但在包含数字(作为字符串)的列中排序错误.
说我有9,12,1(不同栏中的每个数字,当我对它们进行排序时,得到1,12,9或12,1,9,但从未按正确顺序排列.如1,9,12或12,9,1为什么呢?
我也注意到当我逐列排序时,当我尝试获取新列文本时, m_model->item(iSelectedRow,0)->text();
我得到的是初始列文本,但从来没有新的排序列文本.为什么?

sorting qt qtreeview

3
推荐指数
1
解决办法
5544
查看次数

使用boost spirit qi解析器解析enum

我正在尝试解析char以填写C++ 11强类型枚举.我需要帮助为枚举编写解析器..它也需要高性能.

我有一个格式如下的字符串

Category | Type | Attributes 
Run Code Online (Sandbox Code Playgroud)

例:

std::string str1 = "A|D|name=tim, address=3 infinite loop"
std::string str2 = "A|C|name=poc, address=5 overflow street" 
Run Code Online (Sandbox Code Playgroud)

我代表类别和类型如下:

 enum class CATEGORY : char 
 {
     Animal:'A', Bird:'B'
 } 

 enum class TYPE : char 
 {
     Dog:'D', Bird:'B'
 } 

 struct Zoo
 {
      Category category; 
      Type     type; 
      std::string name;
      std::string address;
 }; 

namespace qi = boost::spirit::qi;
namespace repo = boost::spirit::repository;
namespace ascii = boost::spirit::ascii;
template <typename Iterator>
struct ZooBuilderGrammar :  qi::grammar<Iterator, ascii::space_type>
{
 ZooBuilderGrammar():ZooBuilderGrammar::base_type(start_)
 {
    using qi::char_; 
    using …
Run Code Online (Sandbox Code Playgroud)

c++ enums boost boost-spirit-qi c++11

3
推荐指数
2
解决办法
1423
查看次数

QTcpSocket问题

使用 Qt 编写聊天。有问题。我客户端的 QTcpSocket 保持连接状态,但服务器发出 newConnection() 信号。不需要网络会话。这是为什么?这是一些代码:

ChatClient::ChatClient(QObject *parent)
    : QObject(parent) {
    tcpSocket = new QTcpSocket(this);
    QNetworkConfigurationManager manager;
    if (QNetworkConfigurationManager::NetworkSessionRequired
        & manager.capabilities()) {
        qDebug() << "Network session required";
    }
    connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(error(QAbstractSocket::SocketError)));
    connect(tcpSocket, SIGNAL(connected()),
            this, SLOT(requestForID()));
    connect(tcpSocket, SIGNAL(readyRead()),
            this, SLOT(receiveMessage()));
    tcpSocket->connectToHost("192.168.0.100", PORT);
}

void ChatClient::requestForID() {
    qDebug() << "Connected, requesting for ID";
    QByteArray segment;
    QDataStream out(&segment, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_7);
    out << (quint16)0 << ID;
    out.device()->seek(0);
    out << (quint16)(segment.size() - sizeof(quint16));
    tcpSocket->write(segment);
}
Run Code Online (Sandbox Code Playgroud)

requestForID() 永远不会被执行

ChatServer::ChatServer(QObject *parent)
    : QObject(parent) {
    tcpServer …
Run Code Online (Sandbox Code Playgroud)

qt qtcpsocket

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

在QImage中bytesPerLine是什么意思?

bytesPerLine的含义是什么

QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
Run Code Online (Sandbox Code Playgroud)

在文档中,提到bytesPerLine指定每行的字节数(stride).
我不清楚它的用法.width和bytesPerLine是一样的吗?有人可以解释一下吗?

qt qt4

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

字符串的Enum等价物

我研究了枚举,它只需要整数输入并返回相应的值.我想实现同样的东西,但我只有字符串作为输入.我想做以下工作 -

enum Types {
"Absolute", //"abs"
"PURE", //"PRE"
"MIXED" //"MXD"
}
Run Code Online (Sandbox Code Playgroud)

可能的陈述可能是 -

string sTpes = Types("abs"); //this should return "Absolute"
Run Code Online (Sandbox Code Playgroud)

要么

string sTpes = Types("MXD"); //this should return "MIXED"
Run Code Online (Sandbox Code Playgroud)

如果不使用枚举,请建议我实现这一目标的可能方法.

谢谢.

c c++ string enums

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

C++中的Const过程,Visual Studio C++ 2010中的奇怪错误?

class a{
public:
    int b;
    static int c;
    virtual void mod() const
    {
        c=4;
    }

};



int _tmain(int argc, _TCHAR* argv[])
{
  a bi;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

看看这个...使用Visual Studio C++ 2010编译器编译之后,我得到......

cpplearningconsole.obj:错误LNK2001:未解析的外部符号"public:static int a :: c"(?c @ a @@ 2HA)

我想这是一个编译器错误.对我来说,真正的问题是.如果它是const,mod应该能修改吗?

谢谢.

c++ visual-c++-2010

0
推荐指数
1
解决办法
317
查看次数

C中的2d数组,负指数

我正在编写一个C程序,我需要带有负索引的2D数组(动态分配)或索引不从零开始.因此对于数组[i] [j],行索引i应该采用例如1到3的值,并且列索引j应该采用例如-1到9的值.

为此我创建了以下程序,这里变量columns_start设置为零,所以只是行索引被移位,这非常正常.

但是当我为变量columns_start分配除零以外的其他值时,我得到消息(来自valgrind)命令"free(array [i]);" 是无效的.所以我的问题是:

  1. 为什么释放我之前分配的内存是无效的?
  2. 如何修改我的程序以转换列索引?

谢谢您的帮助.

#include <stdio.h> 
#include <stdlib.h>

main()
{

int **array, **array2;
int rows_end, rows_start, columns_end, columns_start, i, j;

rows_start = 1;
rows_end = 3;

columns_start = 0;
columns_end = 9;

  array = malloc((rows_end-rows_start+1) * sizeof(int *));

  for(i = 0; i <= (rows_end-rows_start); i++) {
    array[i] = malloc((columns_end-columns_start+1) * sizeof(int));
  }

  array2 = array-rows_start;                          //shifting row-index

  for(i = rows_start; i <= rows_end; i++) {
    array2[i] = array[i-rows_start]-columns_start;    //shifting column-index
  }

  for(i = rows_start; i …
Run Code Online (Sandbox Code Playgroud)

c arrays free memory-management

0
推荐指数
1
解决办法
1384
查看次数

在Win32 API ListView中添加带换行符的文本

我正在使用WC_LISTVIEW控件创建一个在运行时填充数据的表.桌子工作正常.但是,我无法在一个单元格中显示多行.

有没有办法使用换行符(例如\n)?

这是我创建表的方式:

HWND listViewErrors = CreateWindow(WC_LISTVIEW, L"",
    WS_VISIBLE | WS_BORDER | WS_CHILD | LVS_REPORT | LVS_SINGLESEL,
    17, 27, errorsRect.Width() - 12, errorsRect.Height() - 25,
    GetWindowHandle(), (HMENU)ID_LIST_ERRORS, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

我添加这样的行:

LVITEM lvi = { 0 };

lvi.mask = LVIF_TEXT;
lvi.pszText = L"Label of an entry";

int ret = ListView_InsertItem(hwndList, &lvi); // Main item

if (ret >= 0)
{
    ListView_SetItemText(
            hwndList,
            ret,
            1,
            L"A description containing\nline breaks, but the\nline breaks will be\nignored."); // Sub item
}

return ret;
Run Code Online (Sandbox Code Playgroud)

结果是换行符( …

c++ winapi

0
推荐指数
1
解决办法
244
查看次数