小编Top*_*ndr的帖子

如果使用CMAKE作为构建系统,如何为mingw定义UNICODE

美好的一天,我在Windows平台上使用Cmake构建系统构建我的Qt项目,但是如果我在cmake文件中添加行:

add_definitions("-DUNICODE -D_UNICODE")
UNICODE的定义不起作用(MINGW),只有在用MSVC编译器构建项目时才能正常工作.经过一段时间我找到了解决方法当我调用CMake时如何定义变量,以便qtcreator知道它已定义?,这个解决方案工作,但如果我使用原生WINAPI函数,如CreateFile我得到编译错误,因为编译器选择CreateFileA但我使用w_char我想使用CreateFileW,这是因为宏UNICODE的定义出现之前,我包括我confugure file.How如何在cmakefile中定义UNICODE宏?

macros qt mingw cmake

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

在QTreeView中插入和删除行

美好的一天,我有一个继承自QAbstractItemModel的基本模型,还有一些不时通知该模型的后台线程,在示例中,插入行实现了这样的功能

bool TreeModel::insertRows(int position, int rows, const QModelIndex &parent)
{
    TreeItem *parentItem = getItem(parent);
    bool success;

    beginInsertRows(parent, position, position + rows - 1);
    success = parentItem->insertChildren(position, rows, rootItem->columnCount());
    endInsertRows();

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

但是我不能这样做,因为我的模型是单个的,它使用4个视图,所以我是这样实现插入的:

void notifyEventImpl(file_item_type *sender,helper<ITEM_ACTION_ADDED>)
        {
            base_class::setSize(file_item_type::size()+sender->size());         
            m_listDirectory.push_back(sender);
            file_item_type::filesystem_type::s_notify.insert(this); // notify my model
        } 
Run Code Online (Sandbox Code Playgroud)

s_notify有实现的类在哪里:

 void Notifaer::dataChange(void * item){emit dataChanged(item);}
        void Notifaer::remove(void * item){emit removed(item);}
        void Notifaer::insert(void * item){emit inserted(item);}
        void Notifaer::push_back(const FileItemModel * model)
        {
            VERIFY(QObject::connect(this,SIGNAL(dataChanged(void*)),model,SLOT(dataChangeItem(void*)) ));
            VERIFY(QObject::connect(this,SIGNAL(removed(void*)),model,SLOT(removeItem(void*)) ));
            VERIFY(QObject::connect(this,SIGNAL(inserted(void*)),model,SLOT(insertItem(void*)) ));
        }
Run Code Online (Sandbox Code Playgroud)

鉴于此,我将调用该方法:

void FileItemModel::insertItem(void *it)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtreeview qabstractitemmodel

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

std :: put_time格式

我想了解如何使用std :: put_time,以及如何以"YYYY/MM/DD HH:MM:SS"格式获取日期戳.现在我写下这样的东西:

std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
        std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));
        std::cout  << std::put_time(std::localtime(&now_c), "%F %T") << '\n';
Run Code Online (Sandbox Code Playgroud)

输出是2011-10-25 12:00:08,我怎样才能得到2011/10/25 12:00:08的日期.

c++ c++11

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

如何将命令行参数传递给正在运行的进程?

在Linux平台上,如果我在控制台中编写,ps -p "pid" -o command我会在运行程序时获得所有在终端中传递的参数.控制台输出如下:COMMAND gedit /home/sasha/Work/unloker/main.cpp (Ubuntu).现在我正在编写程序,主要目的是获得完整的输入命令行.我的C++代码是:

snprintf(path_cmdline, sizeof(path_cmdline), "/proc/%d/cmdline", pid);
fd_cmdline = open(path_cmdline, O_RDONLY);
if (fd_cmdline < 0) {
} else {
  char process_name[PATH_MAX];
  if (read(fd_cmdline, process_name, PATH_MAX) < 0) {
  } else {
     pid_info pid_t;
     pid_t.pid=pid;
     strcpy(pid_t.command_line,process_name);
     strcpy(pid_t.process_name,basename(process_name));
     std::cout << pid_t << std::endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

和我的程序输出这样的东西:10753 gedit gedit但是我怎么能得到完整的命令行,当输出ps -p "pid" -o command

/proc/%d/运行程序的保持完整命令行中的哪个位置?在Solaris系统中,我知道存在命令pargs,它做我想要的,可能是现在我怎么可能找到这个命令的来源?

c c++ unix linux shell

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

标签 统计

c++ ×3

qt ×2

c ×1

c++11 ×1

cmake ×1

linux ×1

macros ×1

mingw ×1

qabstractitemmodel ×1

qtreeview ×1

shell ×1

unix ×1